mysql - #Query 以根据特定条件填充不同的结果。(挑战者查询)
问题描述
请任何人协助我们解决我们的终极挑战者问题。
表名:attendance_tbl
nota_id represents present or absent nota_id ='1' => PRESENT
priod_id
1=>Hour-1
2=>Hour-2
3=>Hour-3
4=>Hour-4
5=>Hour-5
如果 priod_id 包含值 1 或 2 或 3 或 4 则根据条件我们将百分比设置为 0.25
如果 priod_id 包含 1 或 2 或 3 或 4 或 5,则根据条件我们设置百分比 0.2。
如果 priod_id 超过 4,如果它在任何一天的值为 5,那么我们将所有 1、2、3 和 4 的百分比设置为 0.2
如果 priod_id 在 4 中,我们必须将所有 1、2、3、4 的百分比设置为 0.25
例子 :
Date : 2018-08-31
priod_id =1 , priod_id =2 priod_id =5
Then set Percentage = 0.2 for 1,2,5
priod_id =1 , priod_id =2 priod_id =4
Then set Percentage = 0.25 for 1,2,4
Please refer to the query we have tried the least.
SELECT *,
IF(`nota_id` = '1', Percentage,'0.0') AS ABSENT
from (SELECT *, CASE WHEN (max(`priod_id`) > 4) THEN "0.2"
ELSE "0.25"
END as Percentage
FROM `attendance_tbl`
WHERE DATE(attend_date) BETWEEN '2018-08-01' AND '2018-08-31'
AND sid = '74'
GROUP BY sid, attend_date) t
解决方案
我们找到了答案。
SELECT *,
CASE WHEN(max( priod_id
) > 4) THEN "0.2" ELSE "0.25" END AS PERCENTAGE,
COUNT(priod_id) as HOURS, COUNT(CASE WHEN nota_id = '1' THEN 1 END) AS PR From attendance_tbl
A WHERE DATE (attend_date) BETWEEN DATE('2018-08-01') AND DATE('2018-08-31') AND sid = '60' GROUP BY DATE(attend_date)
推荐阅读
- blazor - 如何处理托管它的组件/页面中的 Blazor 子组件中引发的异常?
- c# - DDD 删除聚合的最佳解决方案
- python - 使用 pyMongo 和 MongoEngine 从 MongoDb 列表中删除对象及其索引?
- java - 多个 MQTT 客户端订阅同一个主题
- php - 如果结果存在,如何搜索 PHP 数组并创建唯一变量?
- java - 我无法通过 JFileChooser 加载图表并实际显示它
- python - 以 5000 个字符的限制拆分文本文件
- firebase-authentication - 是否可以同时使用电话注册用户并链接电子邮件帐户?
- flutter - Flutter API 响应未存储,显示之前的值
- javascript - HTML datalist 从列表中隐藏选项