Множественный выбор количества в разных условиях - PullRequest
0 голосов
/ 20 января 2019

У меня есть таблица, которая содержит clients_status, и мой запрос выглядит так:

SELECT ROUND((SUM(client_status='BAD DEBT')/COUNT(*))*100) AS BAD, 
       ROUND((SUM(client_status='ALERT')/COUNT(*))*100) AS ALERT, 
       ROUND((SUM(client_status='REMIND BAYAR')/COUNT(*))*100) AS REMIND, 
       ROUND((SUM(client_status='RUTIN BAYAR')/COUNT(*))*100) AS RUTIN, 
       ROUND((SUM(client_status='POTENSI KOREKSI')/COUNT(*))*100) AS POTENSI, 
       ROUND((SUM(client_status='TOP 10')/COUNT(*))*100) AS TOP FROM clients

И вывод моего запроса таков: enter image description here

Что я должен сделать, чтобы мой вывод был таким:

Data     value
=============== 
Bad      29
Alert    29
Remind   14
Rutin    14
Potensi  0
Top      15

Пожалуйста, помогите, ребята ... спасибо,

1 Ответ

0 голосов
/ 20 января 2019

Агрегирование по статусу и перекрестное присоединение к подзапросу, получая общее количество для расчета процента.Для переименования и пользовательского заказа вы можете использовать CASE s.

SELECT cs.s data,
       cs.c / ca.c * 100 value
       FROM (SELECT CASE client_status
                      WHEN 'BAD DEPT' THEN
                        1
                      WHEN 'ALERT' THEN
                        2
                      WHEN 'REMIND BAYAR' THEN
                        2
                      WHEN 'RUTIN BAYAR' THEN
                        4
                      WHEN 'POTENSI KOREKSI' THEN
                        5
                      WHEN 'TOP 10' THEN
                        6
                    END o,
                    CASE client_status
                      WHEN 'BAD DEPT' THEN
                        'Bad'
                      WHEN 'ALERT' THEN
                        'Alert'
                      WHEN 'REMIND BAYAR' THEN
                        'Remind'
                      WHEN 'RUTIN BAYAR' THEN
                        'Rutin'
                      WHEN 'POTENSI KOREKSI' THEN
                        'Potensi'
                      WHEN 'TOP 10' THEN
                        'Top'
                   END s,
                   count(*) c
                   FROM clients
                   GROUP BY client_status) cs
            CROSS JOIN (SELECT count(*) c
                               FROM clients) ca
       ORDER BY cs.o;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...