你好,我是风一样的树懒,一个工作十多年的后端开发,曾就职京东、阿里等多家互联网头部企业。
文章可能会比较长,主要解析的非常详解,或涉及一些底层知识,供面试高阶难度用。可以根据自己实际理解情况合理取舍阅读
在 MySQL 中,DISTINCT 和 GROUP BY 都是用于处理查询结果的聚合和去重操作,但它们在语义和使用场景上有明显的区别。下面是它们的共同点与区别。
去重功能:
两者都可以用来去除重复的结果行。DISTINCT 去除重复行,GROUP BY 通过分组的方式,也会将重复的记录归为一组,从而实现去重。
常常用在 SELECT 语句中:
DISTINCT 和 GROUP BY 都通常用于 SELECT 语句中,以控制结果集中的重复数据。
示例:
SELECT DISTINCT department FROM employees;
SELECT department FROM employees GROUP BY department;
以上两个sql执行结果一致。留一个问题,那么哪一个的效率会更高呢?
基本功能与用途:
DISTINCT:主要用于返回唯一不同的值。它作用于查询的全部字段,返回的是所有字段组合去重后的唯一记录。例如:
SELECT DISTINCT column1, column2 FROM table;
该查询返回的是 column1 和 column2 的组合去重后的结果。
GROUP BY:主要用于将数据按某一字段进行分组,并且常常配合聚合函数(如 COUNT(), SUM(), AVG(), MAX(), MIN() 等)一起使用。GROUP BY 的本质是对数据进行分组,而不是单纯去重。例如:
SELECT column1, COUNT(*) FROM table GROUP BY column1;
该查询会根据 column1 对记录进行分组,并统计每个组的行数。
处理方式:
DISTINCT:直接去重,针对查询结果中的每一列,去掉重复的记录。
GROUP BY:是通过对某个或多个字段进行分组来聚合数据。即使没有聚合函数,GROUP BY 也会使数据按指定的字段分组,从而去重。
聚合函数的使用:
DISTINCT:通常不会直接与聚合函数结合使用,但可以用在聚合函数中,比如:
SELECT COUNT(DISTINCT column1) FROM table;
该查询统计 column1 的唯一值的数量。
GROUP BY:常常与聚合函数一起使用,如 COUNT(), SUM(), AVG() 等。例如:
SELECT column1, SUM(column2) FROM table GROUP BY column1;
该查询会根据 column1 分组并计算每组的 column2 总和。
返回结果的不同:
DISTINCT:返回的是去重后的完整行,每行的每个字段的组合必须唯一。
GROUP BY:返回的是每个分组的摘要数据。如果不使用聚合函数,它将返回每个分组的第一个或唯一记录(具体取决于数据库的实现和排序方式)。
适用场景:
DISTINCT:适用于简单的去重操作,尤其是当你只关心某些列的唯一性时。
GROUP BY:适用于需要按某些列对数据进行分组并执行聚合操作的场景,或者需要计算每个组的统计信息时。
DISTINCT 示例:
SELECT DISTINCT department FROM employees;
该查询返回所有不同的部门名称,重复的部门会被去掉。
GROUP BY 示例:
SELECT department, COUNT(*) FROM employees GROUP BY department;
该查询按部门分组,并统计每个部门的员工数量。
DISTINCT 是用来去重的,而 GROUP BY 用于分组并且通常结合聚合函数来使用。
如果只是想去重某些列的记录,使用 DISTINCT 更简洁;而如果需要按某列分组并计算统计信息,使用 GROUP BY 会更合适。
今天的内容就分享到这儿,喜欢的朋友可以关注,点赞。有什么不足的地方欢迎留言指出,您的关注是我前进的动力!