希望我的主题足够描述.
基本上,我有一个名为Students的表,还有一个名为Absences的表.学生表包含学生信息(姓名,DOB,学生ID等),缺勤表包含任何缺勤(日期,原因,由StudentID相关).我想得到一份完整的学生名单,以及他们缺席的情况.
样本结果如下:
StudentName Absences ------------- ----------- Johnny 3 Mark 2 James 1 Anthony 0 Sharon 0
有人可以建议我应该解决这个问题吗?
我宁愿有一个SQL语句,可能包含一些视图等.
谢谢,
雅各布.
mdm*_*dma 14
这将查找每个学生的缺席次数,并按照您的示例中的大多数缺勤排序.
SELECT
studentname, count(absences_id)
FROM
Students s
LEFT OUTER JOIN
Absences a ON s.student_id=a.student_id
GROUP BY studentname
ORDER BY count(absences_id) DESC, student_name
Run Code Online (Sandbox Code Playgroud)
LEFT OUTER JOIN非常重要,因为缺席表中某些学生可能没有行.在这种情况下,来自该行的缺勤的所有字段都将为空,并且计数将为零,因为它仅计算非空字段.
如果每次缺席都可以跨越一系列日期,例如由于病假或延长假期而缺勤,那么您可以将start_date,end_date添加到Absences表并用SUM替换COUNT(absences_id)(DATEDIFF(day,start_date,end_date)),例如
SELECT
studentname, SUM(ISNULL(DATEDIFF(day, start_date, end_date),0)
FROM
Students s
LEFT OUTER JOIN
Absences a ON s.student_id=a.student_id
GROUP BY studentname
Run Code Online (Sandbox Code Playgroud)
您可以将ORDER BY子句设置为SUM(...),但它将提高可读性和可维护性,以将其包装在另一个查询中.
| 归档时间: |
|
| 查看次数: |
5091 次 |
| 最近记录: |