我正在为我的学校设计一个程序,以保持学生的出勤记录。到目前为止,我有以下查询工作正常,现在我想添加一个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
有关如何做到这一点的任何建议吗?
感谢您的关注
答案 0 :(得分:0)
基本理念是:
select stuattend.studid, sum(stuattend.attendance = `absent`) / count(*)
from stuattend
group by stuaddend.studid;
这在很大程度上取决于每个学生和每天只有一个条目,如果没有缺席,当然会得0,如果总是缺席则会得1个。
为了使这一点更稳定,我建议写一个日历日表,它只保留所有日期和列的列表(如果这是一个上学日),所以workday
= 1表示他们应该有在那里,workday
= 0表示星期日或假日。然后你就可以从这张表中加入到现场和缺席日,甚至可以在你的表中没有包含存在时给出好的结果。
请问你是否决定走哪条路。