首页 > 解决方案 > #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

表格结果和结构

标签: mysql

解决方案


我们找到了答案。

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_tblA WHERE DATE (attend_date) BETWEEN DATE('2018-08-01') AND DATE('2018-08-31') AND sid = '60' GROUP BY DATE(attend_date)


推荐阅读