以下是我正在使用的内容(SQL Server):
学生被分配到一个部门,学生记录中包含部门的ID号。 “作业”是学生和课程(课程未显示)之间的链接,其中包含状态(不完整,通过,未尝试)。
我想列出各个部门,并列出每个部门,该部门的学生总数以及每个个人状态的总分配数(如果这个措辞令人困惑,请参阅下面的示例。)
理想情况下,每个部门都会返回一行。当运行这样的查询时,这通常是我遇到的问题。
示例:一个部门有5名学生和5门课程。每个学生恰好分配到这5门课程中的每一门课程。只有一名学生完成了所有课程,其他学生则没有做任何事。因此,该部门的总数将不会尝试20次,5次传递,0次不完整。
我会很高兴得到一个非常抽象的SQL建议的答案......我只需要知道连接是否需要嵌套,或者这是否可行。
答案 0 :(得分:2)
像
这样的东西SELECT departments.deptName,
sum(case when status = 'attempted' then 1 else 0 end) as attempted_count,
sum(case when status = 'passed' then 1 else 0 end) as passed_count,
sum(case when status = 'incomplete' then 1 else 0 end) as complete_count
FROM departments JOIN students JOIN Assignment
GROUP BY departments.deptName
正如你想要的那样,我没有说明JOIN条件。
答案 1 :(得分:0)
除了每个部门的学生数量外,这将为您提供所需。
SELECT d.deptname, a.status, COUNT(a.status)
FROM departments d
JOIN students s ON d.deptid = s.deptid
JOIN assignment a ON s.studid = a.studid
GROUP BY d.deptname, a.status
要按部门计数添加学生,我可能只是做另一个查询。在您按分配状态进行分组的同一查询中进行此操作很困难。
答案 2 :(得分:0)
这样的事情怎么样?
SELECT
D.deptName, A.status,
COUNT(*) AS statusCount,
COUNT(DISTINCT(S.studID)) AS studCount
FROM departments AS D
INNER JOIN students AS S ON D.deptID = S.deptID
INNER JOIN assignments AS A ON S.studID = A.studID
GROUP BY D.deptName, A.status