leetcode-sql数据库面试题冲刺(高频SQL五十题)

题目:

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

你可能感兴趣的:(sql,测试面试,数据库,leetcode,sql)