Вывод результатов агрегирования значений столбцов по горизонтали

0

У меня есть этот запрос:

SELECT
count(*), 'merchant_id', 'merchant_finance_id', 'merchant_channel_id', 'status'
FROM 'application' 
WHERE 'created_at' >= '2018-04-30' AND 'created_at' < '2018-05-01'
GROUP BY 'merchant_id', 'merchant_finance_id', 'merchant_channel_id', 'status'

Это приводит к следующему:

-------------------------------------------------------------------------------
| count(*) | merchant_id | merchant_finance_id | merchant_channel_id | status |
-------------------------------------------------------------------------------
| 2 | D8E2459CD78C | 55E4D520AC1C | 66A1861918C5 | ACCEPTED                   |
| 2 | D8E2459CD78C | 55E4D520AC1C | 66A1861918C5 | REFERRED                   |
| 1 | E50E50212627 | 6F8F15729DA7 | E02ACD64B452 | AWAITING-ACTIVATION        |
| 2 | E50E50212627 | 6F8F15729DA7 | E02ACD64B452 | DEPOSIT-PAID               |
| 1 | E50E50212627 | 6F8F15729DA7 | E02ACD64B452 | READY                      |
| 1 | E50E50212627 | 6F8F15729DA7 | E02ACD64B452 | REFERRED                   |
| 1 | F04FBD7AEB30 | C11CBD2FC1F8 | 21F2D435EA9D | AWAITING-ACTIVATION        |
-------------------------------------------------------------------------------

Но есть ли способ, чтобы я мог упорядочить status в под столбцы? Например:

-------------------------------------------------------------------------------
| count(*) | merchant_id | merchant_finance_id | merchant_channel_id | accepted | referred | awaiting_activation | deposit_paid | ready
-------------------------------------------------------------------------------
| 2 | D8E2459CD78C | 55E4D520AC1C | 66A1861918C5 | 2 | 2 | 0 | 0 | 0 |
| 5 | E50E50212627 | 6F8F15729DA7 | E02ACD64B452 | 0 | 1 | 1 | 2 | 1 |
| 1 | F04FBD7AEB30 | C11CBD2FC1F8 | 21F2D435EA9D | 0 | 0 | 1 | 0 | 0 |
-------------------------------------------------------------------------------

Замечания:

Существует определенный список разных типов status поэтому мне не нужно беспокоиться о том, что BLAHBLAH каким-то образом является типом статуса.

  • 0
    Возможно, вы захотите проверить сводную функцию или выбросить данные в Excel и использовать там сводную таблицу. Посмотрите на этот вопрос для получения дополнительной информации: ссылка
Теги:
mysql-5.7

1 ответ

1
Лучший ответ

Вы можете попробовать использовать функцию агрегации состояний. Если вы используете Mysql вы можете сделать это проще всего.

SELECT
    count(*), 
    'merchant_id',
    'merchant_finance_id', 
    'merchant_channel_id', 
    SUM('status'='ACCEPTED'),
    SUM('status'='REFERRED'),
    SUM('status'='awaiting_activation'),
    SUM('status'='deposit_paid'),
    SUM('status'='READY')
FROM 'application' 
WHERE 'created_at' >= '2018-04-30' AND 'created_at' < '2018-05-01'
GROUP BY 'merchant_id', 'merchant_finance_id', 'merchant_channel_id'

TestDLL

CREATE TABLE T(
   merchant_id varchar(50),
   merchant_finance_id varchar(50),
   merchant_channel_id varchar(50),
   'status' varchar(50)
);



INSERT INTO T VALUES ('D8E2459CD78C', '55E4D520AC1C','66A1861918C5' ,'ACCEPTED');           
INSERT INTO T VALUES ('D8E2459CD78C', '55E4D520AC1C','66A1861918C5' ,'REFERRED');           
INSERT INTO T VALUES ('E50E50212627', '6F8F15729DA7','E02ACD64B452' ,'AWAITING-ACTIVATION');
INSERT INTO T VALUES ('E50E50212627', '6F8F15729DA7','E02ACD64B452' ,'DEPOSIT-PAID');       
INSERT INTO T VALUES ('E50E50212627', '6F8F15729DA7','E02ACD64B452' ,'READY');             
INSERT INTO T VALUES ('E50E50212627', '6F8F15729DA7','E02ACD64B452' ,'REFERRED');           
INSERT INTO T VALUES ('F04FBD7AEB30', 'C11CBD2FC1F8','21F2D435EA9D' ,'AWAITING-ACTIVATION');

Запрос 1:

SELECT
    'merchant_id',
    'merchant_finance_id', 
    'merchant_channel_id', 
    SUM('status'='accepted') accepted,
    SUM('status'='referred') referred,
    SUM('status'='awaiting_activation') awaiting_activation,
    SUM('status'='deposit_paid') deposit_paid,
    SUM('status'='ready') ready
FROM T
GROUP BY 'merchant_id', 'merchant_finance_id', 'merchant_channel_id'

Результаты:

|  merchant_id | merchant_finance_id | merchant_channel_id | accepted | referred | awaiting_activation | deposit_paid | ready |
|--------------|---------------------|---------------------|----------|----------|---------------------|--------------|-------|
| D8E2459CD78C |        55E4D520AC1C |        66A1861918C5 |        1 |        1 |                   0 |            0 |     0 |
| E50E50212627 |        6F8F15729DA7 |        E02ACD64B452 |        0 |        1 |                   0 |            0 |     1 |
| F04FBD7AEB30 |        C11CBD2FC1F8 |        21F2D435EA9D |        0 |        0 |                   0 |            0 |     0 |
  • 0
    А ну понятно. Пятно на. Спасибо.
  • 0
    @mikelovelyuk Нет проблем :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню