2356. 每位教师所教授的科目种类的数量

表: 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”

  1. 分组维度:按 teacher_id 分组(确保每个教师对应一条统计结果);
  2. 去重统计:对每个教师分组内的 subject_id 进行去重计数(因为同一科目在不同系教授仍算 1 种,需排除重复的 subject_id);
  3. 结果命名:将去重后的计数命名为 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分组