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

标签 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

关于如何做好这件事有什么建议吗?

感谢您的关注

最佳答案

基本想法是:

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/

相关文章:

javascript - 将数组中的空格替换为空格

php - 获取 WordPress 帖子的顶级类别名称而不是 slug

php - 插入 SQL 时保留 JSON 数据的顺序

database - 哪一个扩展性更好?

mysql - 外键约束。子表可以有空值吗?错误 1452 (23000)

mysql - 针对本地数据库的 Rspec 测试

php - 如何使西里尔字符大写?

php - 如何更新 PHP/mysql 中的行?

减少一些繁琐的代码以求简单

sql - Oracle 使用函数进行计数