去重是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个。
多列的去重则是根据指定的去重的列信息来进行,即只有所有指定的列信息都相同,才会被认为是重复的信息。

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


    
  1. 示例数据表中的数据:
  2. mysql> select * from talk_test;
  3. +----+-------+--------+
  4. | id | name | mobile |
  5. +----+-------+--------+
  6. | 1 | xiao9 | 555555 |
  7. | 2 | xiao6 | 666666 |
  8. | 3 | xiao9 | 888888 |
  9. | 4 | xiao9 | 555555 |
  10. | 5 | xiao6 | 777777 |
  11. +----+-------+--------+
  12. 进行单列去重后的结果:
  13. mysql> select distinct(name) from talk_test;
  14. +-------+
  15. | name |
  16. +-------+
  17. | xiao9 |
  18. | xiao6 |
  19. +-------+
  20. 2 rows in set (0.01 sec)
  21. mysql> select distinct(mobile) from talk_test;
  22. +--------+
  23. | mobile |
  24. +--------+
  25. | 555555 |
  26. | 666666 |
  27. | 888888 |
  28. | 777777 |
  29. +--------+
  30. **只会保留指定的列的信息
  31. 进行多列去重后的结果:
  32. mysql> select distinct name,mobile from talk_test;
  33. +-------+--------+
  34. | name | mobile |
  35. +-------+--------+
  36. | xiao9 | 555555 |
  37. | xiao6 | 666666 |
  38. | xiao9 | 888888 |
  39. | xiao6 | 777777 |
  40. +-------+--------+
  41. **只有所有指定的列信息都相同,才会被认定为重复的信息

 

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个月内不可修改。