gpt4 book ai didi

sql - 如何从另一个表中获取名称列表+与该名称相关的出现次数

转载 作者:行者123 更新时间:2023-12-04 13:29:42 25 4
gpt4 key购买 nike

希望我的主题行具有足够的描述性。

基本上,我有一张叫学生的 table ,还有一张缺勤的 table 。学生表包含学生信息(姓名,DOB,StudentID等),缺勤表包含任何缺勤(日期,原因,与StudentID相关)。我想获得学生的完整名单,以及他们缺勤的数目。

样本结果将是:

学生姓名缺席
------------- -----------
约翰尼3
马可福音2
詹姆斯1
安东尼0
沙龙0

有人可以建议我应该解决这个问题的方法吗?

我希望有一个SQL语句,可能包含一些 View 等。

谢谢,

雅各

最佳答案

如您的示例所示,这将查找每个学生的缺勤数量,并首先对大多数缺勤进行排序。

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

左外联接很重要,因为某些学生的缺勤表中可能没有行。在这种情况下,该行的“缺勤”中的所有字段都将为空,并且计数将为零,因为它仅对非空字段进行计数。

如果每次缺席都可以跨越某个日期范围,例如因病假或长假而缺席的情况下,则应将“开始日期”,“结束日期”添加到“缺勤”表中,并将COUNT(absences_id)替换为SUM(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

您可以将ORDER BY子句设置为SUM(...),但可以提高将其包装在另一个查询中的可读性和可维护性。

关于sql - 如何从另一个表中获取名称列表+与该名称相关的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2838480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com