一、groupby和distinct对比
1.groupby
groupby最主要的功能是用来对数据进行分组,同时也可以对数据进行去重,但是去重有其自己的局限性,从表全局出发,不能对表中单一字段进行去重。
2.distinct
distinct的主要功能是用来对字段去重,可以对单一字段去重也可以对多个字段去重
二、举例
表question_practice_detail
题目一:现在运营想要了解2021年所有联系过题目的总用户数
题目二:现在运营想要了解2021年8月份所有练习过题目的总用户数和练习过题目的总次数,请取出相应结果
题目一解题:
1.使用distinct
select count(distinct device_id) as '总用户数'
from question_practice_detail
结果:
2.使用groupby
select count(*) as '总用户数'
from (
select device_id
from question_practice_detail
group by device_id ) as a
结果:
总结:使用distinct会比使用groupby的sql简单一些,效率的话应该也会更好一些。
题目二解题:
1.使用distinct
select count(distinct device_id),count(question_id)
from question_practice_detail
where date like '2021-08%'
结果:
2.使用groupby
会特别麻烦,省略不写
总结:以上两个例子证明groupby有时候会有一定的局限性。但如果在大数据领域,数据量会很大的情况下,使用distinct会造成数据倾斜,而groupby会避免数据倾斜,所以在考虑场景的情况下,尽量使用groupby。