带有%百分比操作的嵌套count()函数

时间:2015-09-17 14:17:27

标签: php mysql function count

我正在为我的学校设计一个程序,以保持学生的出勤记录。到目前为止,我有以下查询工作正常,现在我想添加一个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

有关如何做到这一点的任何建议吗?

感谢您的关注

1 个答案:

答案 0 :(得分:0)

基本理念是:

select stuattend.studid, sum(stuattend.attendance = `absent`) / count(*)
from stuattend
group by stuaddend.studid;

这在很大程度上取决于每个学生和每天只有一个条目,如果没有缺席,当然会得0,如果总是缺席则会得1个。

为了使这一点更稳定,我建议写一个日历日表,它只保留所有日期和列的列表(如果这是一个上学日),所以workday = 1表示他们应该有在那里,workday = 0表示星期日或假日。然后你就可以从这张表中加入到现场和缺席日,甚至可以在你的表中没有包含存在时给出好的结果。

请问你是否决定走哪条路。