表: Teacher
1 2 3 4 5 6 7 8 9
| +-------------+------+ | Column Name | Type | +-------------+------+ | teacher_id | int | | subject_id | int | | dept_id | int | +-------------+------+ 在 SQL 中,(subject_id, dept_id) 是该表的主键。 该表中的每一行都表示带有 teacher_id 的教师在系 dept_id 中教授科目 subject_id。
|
查询每位老师在大学里教授的科目种类的数量。
以 任意顺序 返回结果表。
查询结果格式示例如下。
示例 1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| 输入: Teacher 表: +------------+------------+---------+ | teacher_id | subject_id | dept_id | +------------+------------+---------+ | 1 | 2 | 3 | | 1 | 2 | 4 | | 1 | 3 | 3 | | 2 | 1 | 1 | | 2 | 2 | 1 | | 2 | 3 | 1 | | 2 | 4 | 1 | +------------+------------+---------+ 输出: +------------+-----+ | teacher_id | cnt | +------------+-----+ | 1 | 2 | | 2 | 4 | +------------+-----+ 解释: 教师 1: - 他在 3、4 系教科目 2。 - 他在 3 系教科目 3。 教师 2: - 他在 1 系教科目 1。 - 他在 1 系教科目 2。 - 他在 1 系教科目 3。 - 他在 1 系教科目 4。
|
解题思路
核心思路是 “按教师分组,统计不重复的科目 ID”:
- 分组维度:按
teacher_id
分组(确保每个教师对应一条统计结果);
- 去重统计:对每个教师分组内的
subject_id
进行去重计数(因为同一科目在不同系教授仍算 1 种,需排除重复的 subject_id
);
- 结果命名:将去重后的计数命名为
cnt
,与题目要求的输出字段一致。
代码实现
1 2 3 4 5 6 7
| SELECT teacher_id, COUNT(DISTINCT subject_id) AS cnt -- 对subject_id去重后计数 FROM Teacher GROUP BY teacher_id; -- 按教师ID分组
|