首页 > 解决方案 > 使用 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 查询。谢谢

标签: sqlsql-servergroup-by

解决方案


只需使用条件聚合:

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”有被当作垃圾扔掉的含义。


推荐阅读