SQL查询:找出同校同年级重复行并按性别分组
解决方案
需求说明
从学生表中查询所有存在多名学生共享相同School和Year值的行,无需指定具体的School和Year参数,最终结果按Gender字段分组展示。
学生表示例
| Name | School | Year | Gender |
|---|---|---|---|
| John | St Mark's | 1 | M |
| Paul | St Mark's | 1 | M |
| David | St Peter's | 2 | M |
| Sally | St Mark's | 3 | F |
| Lucy | St Peter's | 1 | M |
SQL 查询语句
-- 先筛选出有多名学生的School+Year组合 WITH DuplicateClasses AS ( SELECT School, Year FROM Students GROUP BY School, Year HAVING COUNT(*) > 1 ) -- 关联原表获取符合条件的学生记录,并按Gender分组排序 SELECT s.Name, s.School, s.Year, s.Gender FROM Students s JOIN DuplicateClasses dc ON s.School = dc.School AND s.Year = dc.Year ORDER BY s.Gender;
查询结果
| Name | School | Year | Gender |
|---|---|---|---|
| John | St Mark's | 1 | M |
| Paul | St Mark's | 1 | M |
逻辑说明
- 用CTE
DuplicateClasses先找出学生数量超过1的School+Year组合 - 将原学生表与这个CTE关联,过滤出属于这些重复组合的学生记录
- 最后按Gender字段排序,实现分组展示效果(若需聚合统计,可在SELECT中添加
COUNT(*)等函数并配合GROUP BY Gender)
内容的提问来源于stack exchange,提问作者CheckCheck
相关产品推荐
相关产品推荐

