题目:
2356.每位教师所教授的科目种类的数量
表: Teacher
±------------±-----+
| Column Name | Type |
±------------±-----+
| teacher_id | int |
| subject_id | int |
| dept_id | int |
±------------±-----+
在 SQL 中,(subject_id, dept_id) 是该表的主键。
该表中的每一行都表示带有 teacher_id 的教师在系 dept_id 中教授科目 subject_id。
查询每位老师在大学里教授的科目种类的数量。
以 任意顺序 返回结果表。
查询结果格式示例如下。
示例 1:
输入:
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。
思路:
考虑到(subject_id, dept_id) 是该表的主键,且该题目的查询条件为“与每位老师在大学里教授的科目种类的数量”,与之相关的是科目种类,并非为系名,致使系名可能会有多个重复项。
所以使用GROUP BY语句,先根据老师的id将其分组,后使用DISTINCT关键词,去重subject_id。再用COUNT()函数计算出列中的记录数即可。
代码:
SELECT teacher_id,COUNT(DISTINCT subject_id) AS cnt
FROM Teacher
GROUP BY teacher_id