当前位置: 首页 > 知识库问答 >
问题:

棘手的统计数据选择

白念
2023-03-14

有一段时间想弄明白,但运气不好。我有以下表格(MS-SQL 2008):学生ID–电子邮件–档案ID

课程
courseID–名称

学生资源
学生ID–课程ID


配置文件

课程设置

学生学习日志
logID-studentID-courseID-accessDate

每个学生在注册时,都会被分配一个个人资料。对于每个配置文件都有一些必修课程。这些必修课程以及用户参加的任何其他课程都保存在学生课程表中。

每当学生访问课程时,信息都会记录在学生浏览日志中。

我试图根据他们的个人资料找出所有参加过所有必修课的学生。

欢迎指点。

共有1个答案

翁钧
2023-03-14

我认为这应该可以做到这一点(假设我正确地理解了您的数据模型和需求——并且在将这个示例SQL在一起时,我没有犯任何错误——我没有在数据库中创建您的数据模型)。不过,我很确定它应该足够近。

select studentRecords.StudentId, 
       sum(case TakenCourseID when null then 0 else 1 end) as CompleteMandatoryCourses,
       sum(case TakenCourseID when null then 1 else 0 end) as IncompleteMandatoryCourses
  from (
          select mandatoryCourses.StudentID, mandatoryCourses.CourseId as MandatoryCourseID, takenCourses.CourseID as TakenCourseID
            from ( -- Courses student should have taken - based on their profile
                   select p.[Profile], pmc.CourseID, s.StudentID 
                     from profiles p 
                     inner join profilesMandatoryCourses pmc on p.ProfileID = pmc.Profile
                     inner join students s on p.StudentID = s.StudentID
                 ) mandatoryCourses
            left join
                 (
                   -- Course students have taken
                   select s.StudentID, s.ProfileID, sc.CourseID
                     from students s
                     inner join studentsCourseLogs scl on s.StudentID = scl.StudentID
                 ) takenCourses on mandatoryCourses.ProfileId = takenCourses.ProfileID
                               and mandatoryCourses.CourseID = takenCourses.CourseID
       ) studentRecords
group by mandatoryCourse.StudentId
having sum(case TakenCourseID when null then 1 else 0 end) = 0

它将生成如下所示的记录集。。。。

 +----------------+-----------------------------+-------------------------------+
 |  StudentID     |  CompleteMandatoryCourses   |  IncompleteMandatoryCourses   |
 +----------------+-----------------------------+-------------------------------+
 |      1         |      15                     |        3                      |
 |      2         |       8                     |        0                      |
 +----------------+-----------------------------+-------------------------------+

如果你只是想要一份参加所有必修课程的学生名单,你可以把上面所有的内容包装起来,如图所示。。。

select studentID 
  from ( /* insert very long sql here */ ) 
 where IncompleteMandatoryCourses = 0`
 类似资料:
  • 获得场景视频提供最全维度的播放数据统计,帮助您优化视频投放,提升转化等效果。所有数据项均提供移动端统计数据。 统计项覆盖:播放量、播放量TOP100、接口播放量、播放时长、观众量、播完率、观看比例、观看热点、播放域名、地理位置、终端环境、问答统计。 注:所有统计项数据均可在相应页面的右上角,导出CSV表格。 5.1 查看整体概况和单个视频概况 进入统计页面,点击全景概况,可以查看不同时间段全部统计

  • 数据统计 访客统计 问答统计 历史会话 客服统计

  • Netty中是否有任何嵌入式优先级机制可以帮助我决定哪些消息比其他消息发送得更频繁?

  • 下面的代码仅在观察2完成后才从观察1发出项。 我需要实现另一种行为 第二个可观测对象仅发射项目,而第一个可观测对象为空,然后发射第一个可观测对象的项目。 我无法找到只使用基本运算符的正确解决方案,自定义运算符startWithDefault的正确RxJava 2实现应该是什么样子? 附笔。 由于种族原因,在可观察到立即发射的情况下,这不是正确的解决方案1

  • 选择数据表格头部 图标,可以选择表格内数值型字段进行各种条件统计; 选择:选择本图层里数值型的字段名称 统计方式:选取求和、求平均数、求最大值、求最小值 点击“计算”后,统计结果在表格底部进行显示

  • 问题内容: 有一段时间遇到这个麻烦。 我有这样的数据库: 我要执行搜索,找到最便宜的汽车,然后按价格升序订购其余相同品牌的汽车。 我希望我的输出是这样的: 最便宜的汽车是福特嘉年华(Forest Fiesta),因此,其余福特车型都按照价格直接订购。然后,本田拥有第二便宜的车型,因此爵士车和其他本田车紧随其后,依此类推。 这可能吗? 问题答案: 您需要做的是创建一个瞬态数据集,该数据集包含car_