列表

详情


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

表: Teacher

+-------------+------+
| Column Name | Type |
+-------------+------+
| teacher_id  | int  |
| subject_id  | int  |
| dept_id     | int  |
+-------------+------+
(subject_id, dept_id) 是该表的主键。
该表中的每一行都表示带有 teacher_id 的教师在系 dept_id 中教授科目 subject_id。

 

写一个 SQL 来查询每位老师在大学里教授的科目种类的数量。

任意顺序 返回结果表。

查询结果格式示例如下。

 

示例 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。

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
# Write your MySQL query statement below

mysql 解法, 执行用时: 377 ms, 内存消耗: 0 B, 提交时间: 2023-04-02 11:21:54

# Write your MySQL query statement below
select teacher_id,count(distinct subject_id) as cnt from teacher group by 1;

mysql 解法, 执行用时: 386 ms, 内存消耗: 0 B, 提交时间: 2023-04-02 11:21:20

# Write your MySQL query statement below
select teacher_id, count(distinct subject_id) cnt from Teacher group by teacher_id;

pythondata 解法, 执行用时: 296 ms, 内存消耗: 60.8 MB, 提交时间: 2023-08-09 14:42:54

import pandas as pd

def count_unique_subjects(teacher: pd.DataFrame) -> pd.DataFrame:
    unique_subjects = teacher.groupby('teacher_id')['subject_id'].nunique().reset_index()
    unique_subjects = unique_subjects.rename(columns={'subject_id': 'cnt'})
    return unique_subjects

pythondata 解法, 执行用时: 292 ms, 内存消耗: 59.9 MB, 提交时间: 2023-08-09 14:44:21

import pandas as pd

def count_unique_subjects(teacher: pd.DataFrame) -> pd.DataFrame:
    df = teacher.groupby(["teacher_id"])["subject_id"].nunique().reset_index()
    df = df.rename({'subject_id': "cnt"}, axis=1)
    return df

上一题