去重是distinct还是group by?

举报
lxw1844912514 发表于 2022/03/27 02:39:52 2022/03/27
【摘要】 distinct简单来说就是用来去重的,而group by的设计目的则是用来聚合统计的,两者在能够实现的功能上有些相同之处,但应该仔细区分,因为用错场景的话,效率相差可以倍计。 单纯的去重操作使用distinct,速度是快于group by的。 distinct distinct支持单列、多列的去重方式。 单列去重的...

distinct简单来说就是用来去重的,而group by的设计目的则是用来聚合统计的,两者在能够实现的功能上有些相同之处,但应该仔细区分,因为用错场景的话,效率相差可以倍计。

单纯的去重操作使用distinct,速度是快于group by的。

distinct

distinct支持单列、多列的去重方式。
单列去重的方式简明易懂,即相同值只保留1个。
多列的去重则是根据指定的去重的列信息来进行,即只有所有指定的列信息都相同,才会被认为是重复的信息。

干巴巴的说不好理解,示例一下:


        示例数据表中的数据:
        mysql> select * from talk_test;
        +----+-------+--------+
        | id | name  | mobile |
        +----+-------+--------+
        |  1 | xiao9 | 555555 |
        |  2 | xiao6 | 666666 |
        |  3 | xiao9 | 888888 |
        |  4 | xiao9 | 555555 |
        |  5 | xiao6 | 777777 |
        +----+-------+--------+
        进行单列去重后的结果:
        mysql> select distinct(name) from talk_test;
        +-------+
        | name  |
        +-------+
        | xiao9 |
        | xiao6 |
        +-------+
        2 rows in set (0.01 sec)
        mysql> select distinct(mobile) from talk_test;
        +--------+
        | mobile |
        +--------+
        | 555555 |
        | 666666 |
        | 888888 |
        | 777777 |
        +--------+
        **只会保留指定的列的信息
        进行多列去重后的结果:
        mysql> select distinct name,mobile from talk_test;
        +-------+--------+
        | name  | mobile |
        +-------+--------+
        | xiao9 | 555555 |
        | xiao6 | 666666 |
        | xiao9 | 888888 |
        | xiao6 | 777777 |
        +-------+--------+
        **只有所有指定的列信息都相同,才会被认定为重复的信息
    
   

 

group by使用的频率相对较高,但正如其功能一样,它的目的是用来进行聚合统计的,虽然也可能实现去重的功能,但这并不是它的长项。

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/ljl890705/article/details/70602442

文章来源: blog.csdn.net,作者:lxw1844912514,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/lxw1844912514/article/details/100028748

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。