首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有% percentage运算的嵌套count()函数

带有% percentage运算的嵌套count()函数
EN

Stack Overflow用户
提问于 2015-09-17 22:17:27
回答 1查看 44关注 0票数 0

我正在为我的学校设计一个程序来保存学生的出勤记录。到目前为止,我已经很好地执行了以下查询,现在我想添加一个IF语句,以便在给定特定条件时执行百分比操作。实际上,该查询使用INNER JOIN从两个不同的表(oxadmain和stuattend)中搜索数据,并在结果表上很好地显示结果:

代码语言:javascript
复制
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”。

到目前为止,我一直在尝试以下几点:

代码语言:javascript
复制
<?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

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

感谢您的关注

EN

回答 1

Stack Overflow用户

发布于 2015-09-18 00:16:05

基本的想法是:

代码语言:javascript
复制
select stuattend.studid, sum(stuattend.attendance = `absent`) / count(*)
from stuattend
group by stuaddend.studid;

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

为了让它更稳定一些,我建议写一个日历日表,它简单地保存所有日期的列表,如果这是一个上学日,则保存一个列,所以workday=1表示它们应该在那里,workday=0表示星期日或假日。然后,您可以将此表的连接保留为存在和缺席天数,甚至在您的表中不包含存在时也会得到很好的结果。

只要问问你是否决定走哪条路就行了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32632639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档