MySQL - DISTINCT & GROUP BY 去重

Posted Lux_Sun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL - DISTINCT & GROUP BY 去重相关的知识,希望对你有一定的参考价值。

mysql中常用去重复数据的方法是使用 distinct  或者 group by ,以上2种均能实现,但2者也有不同的地方。

DISTINCT 特点

如:select distinct name, sex from tb_students  这个sql的语法中,查询 tb_students  表中 name, sex 并去除名字和性别都重复的学生。

1、distinct 只能放在查询字段的最前面,不能放在查询字段的中间或者后面。

  • 备注:select sex, distinct name from tb_students  这种写法是错误的,distinct 只能写在所有查询字段的前面

2、distinct 对后面所有的字段均起作用,即 去重是查询的所有字段完全重复的数据,而不是只对 distinct 后面连接的单个字段重复的数据。

  • 备注:也就是 distinct 关键字对 name, sex 都起作用,去重姓名、性别完全一样的学生,如果姓名相同、性别不同是不会去重的。

3、要查询多个字段,但只针对一个字段去重,使用 distinct 去重的话是无法实现的。

 

GROUP BY 特点

1、一般与聚类函数使用(如count()/sum()等),也可单独使用。

2、group by 也对后面所有的字段均起作用,即 去重是查询的所有字段完全重复的数据,而不是只对 group by 后面连接的单个字段重复的数据。

3、查询的字段与 group by 后面分组的字段没有限制。

  • 特别说明:在 Oracle 中使用 group by 时,查询的字段必须是 group by 分组的字段和聚类函数。如 select name, sex from tb_students group by name 这个 sql 语法在 Oracle 中是错误的,因为 sex 不在 group by 分组后面,但在 MySQL 中是支持的。

以上是关于MySQL - DISTINCT & GROUP BY 去重的主要内容,如果未能解决你的问题,请参考以下文章

MySQL之高级增删改查一

Oracle Database 19c 中的 LISTAGG DISTINCT

java Mongondb聚合函数&去重

mysql中去重 distinct 用法

mysql distinct 去除重复记录

distinct mysql过滤重复记录