当前位置: 首页 > article >正文

1280,学生们参加各科测试的次数

学生们参加各科测试的次数

分析 + 实现

第一步:让学生表和科目表进行笛卡尔积

students 表

在这里插入图片描述

subjects 表

在这里插入图片描述

-- 学生表和科目表进行笛卡尔积
select
    *
from students s
cross join subjects sub;

在这里插入图片描述

第二步:使用考试表进行统计,查询每个学生每科测试次数

select
    student_id,
    subject_name,
    count(*) attended_exams
from examinations
group by student_id, subject_name;

在这里插入图片描述

第三步:将第一步的结果和第二步结果进行左连接

select
    *
from students s
cross join subjects sub
left join (
select
    student_id,
    subject_name,
    count(*) 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;

在这里插入图片描述

第四步:查出想要的数据并进行排序

select
    s.student_id, s.student_name, sub.subject_name, ifnull(grouped.attended_exams, 0) attended_exams
from students s
cross join subjects sub
left join (
select
    student_id,
    subject_name,
    count(*) 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 student_id, subject_name;

在这里插入图片描述

在这里插入图片描述

总结

此题用到了我们很少使用的笛卡尔积,同时分组聚合再次用到


http://www.kler.cn/news/360786.html

相关文章:

  • 苍穹外卖学习笔记(二十七)
  • 循序渐进丨MogDB 5.0 远程访问 MogDB/Oracle 数据库的简便方法(使用@符号)
  • Node Checking - Checkboxes and Radio Buttons 节点检查 - 复选框和单选按钮
  • 一款企业级的低代码开发平台,含流程引擎、表单引擎、权限管理
  • 重新阅读《马说》,感悟“伯乐相马”背后的被选择与选择的大智慧
  • leetcode解题 - #用栈实现队列 #用队列实现栈 #循环队列
  • 【分布式技术】中间件-zookeeper安装配置
  • Python编程语言:探索其无限可能的旅程
  • 集控中心操作台的应用如何确保场站安全运行
  • 鸿蒙开发:实现一个超简单的网格拖拽
  • 【论文阅读】SAM 2: 分割一切图像和视频
  • 【MySQL】InnoDB存储引擎中的锁
  • 一个Docker管理工具,让您的Docker容器自动更新
  • Redis 数据类型Geospatial Indexes(地理空间索引)
  • PLC_博图系列☞基本指令”TP:启动脉冲定时器“
  • Flume面试整理-配置文件格式
  • 性能工具之 HAR 格式化转换JMeter JMX 脚本文件
  • 多一DY4100数字式接地电阻测试仪使用测量方法
  • 数据库SQL查询
  • uploads-labs靶场刷题记录