我正在为我的学校设计一个程序来保存学生的出勤记录。到目前为止,我的以下查询工作正常,现在我想添加一个 IF 语句,以便在给定特定条件时执行百分比运算。实际上,该查询使用 INNER JOIN 来搜索两个不同表(oxadmain 和 Stuattend)中的数据,并且在结果表上很好地显示了结果:
SELECT o.name
, o.year
, o.photoID
, o.thumbs
, s.ID
, s.studid
, s.date
, s.teacher
, s.subject
, s.attendance
FROM stuattend s
JOIN oxadmain o
ON s.studid = o.stuid
ORDER
BY name ASC
现在我想添加一个“if”语句
1) 查找何时 Stuattend.attendance = Absent,计算学生在任何给定时间段内可能缺勤的百分比,然后将该 (%) 值存储在“百分比”和
中
2) ELSE 将 100% 的值分配给“百分比”。
到目前为止,我一直在尝试以下操作:
<?php $_GET['studentID'] = $_row_RepeatedRS['WADAstuattend']; ?>
SELECT oxadmain.name , oxadmain.year , oxadmain.photoID , oxadmain.thumbs , stuattend.ID , stuattend.studid , stuattend.date , stuattend.teacher, stuattend.subject , stuattend.attendance
CASE
WHEN stuattend.attendance = Absent THEN SELECT Count (studentID) AS ClassDays, (SELECT Count(*) FROM stuattend WHERE studentID = stuattend.studid AND Absent = 1) AS ClassAbsent, ROUND ((ClassAbsent/ClassDays)*100, 2) AS Percentage
ELSE
Percentage = 100
END
FROM stuattend INNER JOIN oxadmain ON stuattend.studid=oxadmain.stuid
ORDER BY name ASC
关于如何做好这件事有什么建议吗?
感谢您的关注
最佳答案
基本想法是:
select stuattend.studid, sum(stuattend.attendance = `absent`) / count(*)
from stuattend
group by stuaddend.studid;
这在很大程度上取决于每个学生每天的一次参赛,当然,如果没有缺席,则为 0,如果总是缺席,则为 1。
为了使其更加稳定,我建议编写一个日历日表,该表仅保留所有日期的列表和一列(如果这是学校日),因此 workday
=1 表示他们应该在那里,workday
=0 表示星期日或节假日。然后,您可以从此表中离开连接到在场和缺席天数,甚至当表中不包含在场时也会给出良好的结果。
只要询问您是否决定走哪条路即可。
关于php - 带有 % 百分比操作的嵌套 count() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32632639/