我正在为我的学校设计一个程序来保存学生的出勤记录。到目前为止,我已经很好地执行了以下查询,现在我想添加一个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 =缺课,计算学生在任何给定时间段内可能缺课的百分比,然后将该(%)值存储在“百分比”中,并
2)否则将100%的值赋值给“Percentage”。
到目前为止,我一直在尝试以下几点:
<?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对如何做好这件事有什么建议吗?
感谢您的关注
发布于 2015-09-18 00:16:05
基本的想法是:
select stuattend.studid, sum(stuattend.attendance = `absent`) / count(*)
from stuattend
group by stuaddend.studid;这在很大程度上取决于每个学生每天只有一个条目,当然,如果没有缺席,得到0,如果总是缺席,得到1。
为了让它更稳定一些,我建议写一个日历日表,它简单地保存所有日期的列表,如果这是一个上学日,则保存一个列,所以workday=1表示它们应该在那里,workday=0表示星期日或假日。然后,您可以将此表的连接保留为存在和缺席天数,甚至在您的表中不包含存在时也会得到很好的结果。
只要问问你是否决定走哪条路就行了。
https://stackoverflow.com/questions/32632639
复制相似问题