mysql的distinct和group by的区别

news/2025/1/23 23:14:11/

GROUP BY 和 DISTINCT 都是用于从数据库中选择唯一值的 SQL 子句。它们之间的主要区别在于它们的作用方式和应用场景。

GROUP BY 语句用于将数据按照一个或多个列进行分组,然后对每个组应用一个聚合函数(如 COUNT、SUM、AVG 等)以得到每个组的统计结果。GROUP BY 通常用于在查询中生成汇总信息。例如:

SELECT category, COUNT(*) AS count
FROM products
GROUP BY category;

以上查询会按照商品类别将数据分组,并统计每个类别的商品数量。

DISTINCT 语句用于从查询结果中选择唯一的值。它可以用于从一个或多个列中选择唯一的值,也可以用于选择整行的唯一值。例如:

SELECT DISTINCT category
FROM products;

以上查询会返回所有不同的商品类别。

总的来说,GROUP BY 用于对数据进行分组和聚合操作,DISTINCT 则用于选择唯一的值。GROUP BY 通常用于在查询中生成汇总信息,而 DISTINCT 则用于选择不同的值以进行数据清理或统计。

此外,GROUP BY 通常会产生比 DISTINCT 更多的结果,因为它按照指定的列进行分组,而每个分组内可能包含多个不同的值。例如,在以下查询中:

SELECT category, supplier
FROM products
GROUP BY category;

结果会按照商品类别分组,并且对于每个类别,会返回该类别下的任意一条记录中的供应商信息。这意味着如果一个类别下有多个供应商,那么在结果中会出现多条记录,而这些记录的商品类别相同但供应商不同。

与之相比,以下查询使用 DISTINCT 选择了不同的商品类别和供应商:

SELECT DISTINCT category, supplier
FROM products;

在这种情况下,每个组合(商品类别和供应商)只会出现一次。

需要注意的是,GROUP BY 和 DISTINCT 都会对查询的性能产生一定的影响。GROUP BY 可能会需要对数据进行排序和分组操作,而这些操作需要消耗更多的 CPU 和内存资源。因此,在使用 GROUP BY 时需要谨慎,尽可能选择合适的索引和优化查询语句,以减少查询的时间和资源消耗。而 DISTINCT 则通常比 GROUP BY 更快,因为它只需要对结果集进行唯一化处理即可。

有索引的情况下:group by和distinct都能使用索引,效率相同。
无索引的情况下:distinct效率高于group by,因为GROUP BY 可能会需要对数据进行排序和分组操作。


http://www.ppmy.cn/news/31365.html

相关文章

前端基础(十六)_数组对象

数组对象 1、创建数组 // 字面量创建const arr [1, 2, 3, 4, 5, 6]// 构造函数创建const arr2 new Array(1, 2, 3, 4, 5, 6)const arr3 Array(1, 2, 3, 4, 5, 6)2.push (从数组末尾添加元素) a.数组.push(要添加进数组的数组项) b.作用:将要添加的数组项 添加到…

数据的存储--->【大小端字节序】(Big Endian)(Little Endian)

⛩️博主主页:威化小餅干📝系列专栏:【C语言】藏宝图🎏 ✨绳锯⽊断,⽔滴⽯穿!一个编程爱好者的学习记录!✨前言计算机硬件有两种存储数据的方式:大端字节序——Big Endian小端字节序——Little …

Vue3之组件间的双向绑定

何为组件间双向绑定 我们都知道当父组件改变了某个值后,如果这个值传给了子组件,那么子组件也会自动跟着改变,但是这是单向的,使用v-bind的方式,即子组件可以使用父组件的值,但是不能改变这个值。组件间的…

“微服务架构:优点、缺点及实现方式“

微服务是一种软件开发架构,它将应用程序拆分成小型、独立的服务单元。每个服务单元都是自给自足的,它们可以独立地进行开发、测试和部署。这种架构的好处是它可以使软件更容易维护、扩展和更新,同时还可以提高开发团队的灵活性和效率。在本文…

裸辞两个月还能不能找到工作?亲身经历告诉你结果·····

这是我在某论坛看到的一名网友的吐槽: 软件测试四年,主要是手动测试(部分自动化测试和性能测试,但是用的是公司内部自动化工具,而且我自动化方面是弱项。)现在裸辞两个月了,面试机会少而且面试…

#Vue3篇:响应式工具ref()、toRef()、 toRefs()、reactive()的用法和区别

ref() 定义: ref()接收一个普通的Javascript值作为参数,将其转换为响应式对象(ref对象)。 ref对象有一个.value属性,用于获取和修改之。 参数1: 一个普通的Javascript值作为参数 import { ref } from vue const count ref(0) c…

Moonbeam生态说|解读2023年Web3发展的前景和亮点

「Moonbeam生态说」是Moonbeam中文爱好者社区组织的社区AMA活动。该活动为媒体和已部署Moonriver或Moonbeam的项目方提供了在主流Moonbeam非官方中文社区内介绍自己的项目信息,包括:项目介绍、团队介绍、技术优势和行业发展等,帮助社区内的Mo…

springcloud3 fegin服务超时的配置和日志级别的配置2

一 fegin的概述 1.1 fegin的默认超时时间 默认fegin客户端只等待1秒钟,超过1秒钟,直接会返回错误。 1.2 架构图 1.2.1 说明 1.2.2 启动操作 1.先启动9001,9002 eureka 2.启动9003 服务提供者 3.启动9006消费者 1.3 情况验证 1.3.1 正常默认情…