Есть ли способ сгруппировать столбец в MySQL в 3 категориях - PullRequest
0 голосов
/ 17 мая 2019

У меня есть вопрос, касающийся моего сценария. Если я использую группу по выводу, который я хочу получить, неверно, однако, если я удаляю группу по выражению, вывод верен, но группировка из 3 категорий кратна показанному разу

Я хочу, чтобы вывод выглядел следующим образом:.

Ex.

I want this to be my output

Мой вывод:

my output

Мой сценарий:

    SELECT store,

CASE priority_level
WHEN '3' THEN 'High Priority'
WHEN '2' THEN 'Medium Priority'
WHEN '1' THEN 'Low Priority'
END as priority_level,


CAST(CASE priority_level 
WHEN '3' THEN IF(date_received >= DATE_SUB(date_finished,INTERVAL 8 HOUR),(SELECT COUNT(*) FROM is_mr_done as imd 
LEFT JOIN (SELECT mr_no,priority_level FROM repair_history ) rh 
ON imd.mr_no = rh.mr_no 
WHERE is_done = '1'  AND rh.priority_level = '3'),'0')

WHEN '2' THEN IF(date_received >= DATE_SUB(date_finished,INTERVAL 3 DAY),(SELECT COUNT(*) FROM is_mr_done as imd 
LEFT JOIN (SELECT mr_no,priority_level FROM repair_history ) rh 
ON imd.mr_no = rh.mr_no 
WHERE is_done = '1' AND rh.priority_level = '2'),'0')

WHEN '1' THEN IF(date_received >= DATE_SUB(date_finished,INTERVAL 5 DAY),(SELECT COUNT(*) FROM is_mr_done as imd 
LEFT JOIN (SELECT mr_no,priority_level FROM repair_history ) rh 
ON imd.mr_no = rh.mr_no 
WHERE is_done = '1'  AND rh.priority_level = '1'),'0')

END AS CHAR(10000) CHARACTER SET utf8) as total_hit,


CASE priority_level 
WHEN '3' THEN IF(date_received >= DATE_SUB(date_finished,INTERVAL 8 HOUR),CONCAT(ROUND((100 / (SELECT COUNT(*) FROM repair_history WHERE priority_level ='3' AND store ='1130') * (SELECT COUNT(*) FROM is_mr_done as imd 
LEFT JOIN (SELECT mr_no,priority_level FROM repair_history) rh 
ON imd.mr_no = rh.mr_no 
WHERE is_done = '1'  AND rh.priority_level = '3'))),'%'),'0')




WHEN '2' THEN IF(date_received >= DATE_SUB(date_finished,INTERVAL 3 DAY),CONCAT(ROUND((100 / (SELECT COUNT(*) FROM repair_history WHERE priority_level ='2' ) * (SELECT COUNT(*) FROM is_mr_done as imd 
LEFT JOIN (SELECT mr_no,priority_level FROM repair_history) rh 
ON imd.mr_no = rh.mr_no 
WHERE is_done = '1'  AND rh.priority_level = '2'))),'%'),'0')




WHEN '1' THEN IF(date_received >= DATE_SUB(date_finished,INTERVAL 5 DAY),CONCAT(ROUND((100 / (SELECT COUNT(*) FROM repair_history WHERE priority_level ='1' ) * (SELECT COUNT(*) FROM is_mr_done as imd 
LEFT JOIN (SELECT mr_no,priority_level FROM repair_history) rh 
ON imd.mr_no = rh.mr_no 
WHERE is_done = '1'  AND rh.priority_level = '1'))),'%'),'0')

END as total_hit_average


FROM repair_history as rh
LEFT JOIN (SELECT mr_no,is_done,date_finished FROM is_mr_done) imd 
ON rh.mr_no = imd.mr_no
WHERE  priority_level  != ''

История восстановления таблицы:

Table 1

Таблица mr_is_done:

Table 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...