这里以下列‘廖雪峰的官方网站’在线SQL地址测试
https://www.liaoxuefeng.com/wiki/1177760294764384/1179611432985088
搜索后的原始数据源
- 原本想按gender进行二次分组,但发现分组后,统计的count(*),不是class_id下gender的去重的总数,而是以class_id,gender确认后组数的数量
SELECT class_id,gender,COUNT(*) AS number FROM students GROUP BY class_id,gender
-
与上图对比发现,count(*) 统计的是gender二次分组后,组内的列数
-
解决方案一:
SELECT class_id,Count(distinct gender) as gender FROM students group by class_id;
- 下图为理想效果,在不跨表的情况下
- 解决方案二:
先分组到临时表,在查询临时列分组
SELECT class_id,count(*) as number FROM
(SELECT class_id,gender as number FROM students Group by class_id,gender)
group by class_id
补充说明:分组统计取前20条,可用于排行或者查询违规类统计
SELECT TOP 20 class_id,Count(distinct gender) as gender FROM students group by class_id Order by gender desc;