sql - 使用 group by 的 sql 查询以查找学生已处理和待处理的作业
问题描述
我有一张桌子叫assignment
:
assignment_id student_id report_id
--------------------------------------
25 1 0
56 2 10
28 1 5
94 1 0
75 1 0
86 1 0
95 2 5
我正在使用这个 SQL 查询来找出每个学生收到的作业总数
select student_id as student, count(assignment_id) as total_assignment ,
from assignment
group by student_id
order by student_id asc
此查询的结果是
student total_assignment
---------------------------
1 5
2 2
在分配表中report_id == 0
,分配未决,否则分配被处置。我还需要找到每个学生的全部已处置和未决作业。
请帮我完成上面的 SQL 查询。谢谢
解决方案
只需使用条件聚合:
select student_id as student, count(*) as total_assignment,
sum(case when report_id = 0 then 1 else 0 end) as num_pending,
sum(case when report_id <> 0 then 1 else 0 end) as num_completed
from assignment
group by student_id
order by student_id asc;
作为一个词的选择:我更喜欢“完成”而不是“处置”。至少在美式英语中,“disposed”有被当作垃圾扔掉的含义。
推荐阅读
- spring-mvc - Spring MVC @RequestParam - 空列表与空
- google-app-engine - Hello World App Engine .NET 应用的延迟约为 500 毫秒
- java - 是否可以在接口类中访问泛型类型的方法?
- scikit-learn - 将 sklearn RFE 与另一个包中的估计器一起使用
- android - SQLite 数据库中的标记文本 ( ) 不会变为粗体
- angular - 如何使用 Angular 5 从 Web 代理读取标头?
- javascript - 使用 Node.js 从 URL 中捕获参数
- c# - C# 隐蔽类型转换为相同类型的 IEnumerable?
- node.js - 雅虎天气 API 抛出“forEach”错误
- html - 有没有办法根据浏览器的高度和宽度设置 BS4 轮播图像的高度和宽度?