订阅更新

至少 5 名学生的课程:同一个学生别算两次

SQL 实战 123 题 · 第 30 题 简单 约 2 分钟读完

LeetCode 596 · COUNT DISTINCT、HAVING

本文目录
  1. 面试怎么回答
  2. 题意
  3. 表结构
  4. 思路
  5. 参考解法
  6. 易错点

面试怎么回答

按 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(*) 会把重复选课记录算成多个学生。
刷题进度保存在当前浏览器