LeetCode刷题---学生们参加各科测试的次数

在这里插入图片描述
在这里插入图片描述
解题思路:

根据题意要实现每个学生参加每个科目考试的次数,如果没有参加,则统计次数为0
首先将学生表和科目表进行笛卡尔积。
对考试表Examinations表统计学生参加考试的次数,按照学生id和考试科目进行分组,使用count函数统计次数,起别名为grouped表
之后将学生表和科目表的笛卡尔积与grouped表进行左外连接(这样保证在学生id不在考试表中的学生也可以被统计上),连接条件为学生id和科目,结果按照学生id,姓名,科目,进行分组。

SQL代码:

SELECT 
    s.student_id, s.student_name, sub.subject_name, IFNULL(grouped.attended_exams, 0) AS attended_exams
FROM 
    Students s
CROSS JOIN 
    Subjects sub
LEFT JOIN (
    SELECT student_id, subject_name, COUNT(*) AS attended_exams
    FROM Examinations
    GROUP BY student_id, subject_name
) grouped 
ON s.student_id = grouped.student_id AND sub.subject_name = grouped.subject_name
ORDER BY s.student_id, s.student_name,sub.subject_name;

题解:官方题解

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值