如何使用SQL按学生ID统计每个学生所属的不同小组数量
实现方案
方案1:仅输出每个学生的统计结果(1行对应1个学生,性能最优)
核心用GROUP BY按学生分组,搭配COUNT(DISTINCT)统计去重后的小组数量,自动过滤同一学生同小组的重复记录:
SELECT STUDENT, COUNT(DISTINCT `GROUP`) AS `COUNT OF GROUP FOR EACH STUDENT` FROM 替换为你的实际表名 GROUP BY STUDENT;
运行后输出结果如下:
| STUDENT | COUNT OF GROUP FOR EACH STUDENT |
|---|---|
| ST 1 | 1 |
| ST 2 | 2 |
| ST 3 | 2 |
方案2:保留原表所有行,每行附带对应学生的统计结果(和你给出的样例格式完全一致)
用窗口函数实现,不需要分组聚合,保留原表所有行:
SELECT `GROUP`, STUDENT, COUNT(DISTINCT `GROUP`) OVER (PARTITION BY STUDENT) AS `COUNT OF GROUP FOR EACH STUDENT` FROM 替换为你的实际表名;
注意事项
GROUP是SQL保留关键字,查询时需要转义:MySQL用反引号`包裹,SQL Server用方括号[]包裹,Oracle用双引号""包裹即可。- 两种写法都已经自动处理了同一学生同小组的重复记录,不需要额外加去重逻辑。
内容的提问来源于stack exchange,提问作者Chirag5523
相关产品推荐
相关产品推荐

