至少 5 名学生的课程:同一个学生别算两次
LeetCode 596 · COUNT DISTINCT、HAVING
面试怎么回答
按 class 分组,HAVING COUNT(DISTINCT student) >= 5。题目明确有重复记录,所以必须去重计数;这类题看到「不应重复计算」就要想到 DISTINCT。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
题意
选课表记录学生和课程。列出至少有 5 名不同学生的课程;同一个学生在同一门课里可能出现多次。
表结构
- courses:student、class;(student, class) 不保证唯一
思路
按课程分组,用 COUNT(DISTINCT student) 数不同的学生,HAVING 过滤 ≥ 5。题目特意说明同一学生可能重复,提示不能用 COUNT(*)。
参考解法
select class
from courses
group by class
having count(distinct student)>=5
易错点
- 用 COUNT(*) 会把重复选课记录算成多个学生。