MySQL - группировка по ROLLUP на основе месяца и идентификатора пользователя - PullRequest
0 голосов
/ 05 июля 2019

Я хочу показать базу данных за месяц и следовать за общим значением за этот месяц.
Например:

|    ID    |           Name          | Amount |   Date   | Month | Day  | Total |
--------------------------------------------------------------------------------
| ZAK00001 | Committee Meeting April |  4000  | 06-02-19 |   2   |  6   |  4000 |
| Total                                                                 |  4000 |
| ZAK00009 | Meeting May             |  500   | 10-06-19 |   6   |  10  |  1000 | 
| ZAK00011 | Meeting May             |  3000  | 20-06-19 |   2   |  20  |  3000 |
| Total                                                                 |  4000 |

Как добиться вышеуказанных данных в SQL? До сих пор я пытался использовать.

Обновление запроса и результата.

Я добавляю IFNULL(a.id, 'Total')

Запрос

SELECT
    -- a.id,
    IFNULL(a.id, 'Total'),
    m.name,
    a.amount,
    date_format( str_to_date( m.meeting_date, "%d/%m/%Y" ), "%d-%m-%y" ) AS date,
    MONTH (
    str_to_date( m.meeting_date, "%d/%m/%Y" )) AS month,
    DAYOFMONTH(
    str_to_date( m.meeting_date, "%d/%m/%Y" )) AS day,
    sum(a.amount)
FROM
    applications a
    INNER JOIN meeting_application ma ON a.id = ma.application_id
    INNER JOIN meetings m ON ma.meeting_id = m.id 
GROUP BY monthName, a.id WITH ROLLUP

Результат

|    ID    |           Name          | Amount |   Date   | Month | Day  | Total |
---------------------------------------------------------------------------------
| ZAK00001 | Committee Meeting April |  4000  | 06-02-19 |   2   |  6   | 4000  |
| Total    | Committee Meeting April |  4000  | 06-02-19 |   2   |  6   | 4000  |
| ZAK00009 | Meeting May             |  1500  | 10-06-19 |   6   |  10  | 1500  |
| ZAK00011 | Meeting May             |  500   | 20-06-19 |   6   |  20  | 500   |
| Total    | Meeting May             |  500   | 20-06-19 |   6   |  20  | 2000  |

Можем ли мы сделать это в запросе?

Я могу отобразить текст Total. Как не отображать повторяющиеся значения?

1 Ответ

1 голос
/ 05 июля 2019

Должно быть какое-то постоянное исправление, но это также решит вашу проблему: Использование Case Statement :

SELECT
    -- a.id,
    IFNULL(a.id, 'Total'),
    case when a.id is not null then m.name else null end as name,
    case when a.id is not null then a.amount else null end as amount,
    case when a.id is not null then date_format( str_to_date( m.meeting_date, "%d/%m/%Y" ), "%d-%m-%y" ) else null end AS date,
    case when a.id is not null then MONTH (
    str_to_date( m.meeting_date, "%d/%m/%Y" )) else null end AS month,
    case when a.id is not null then DAYOFMONTH(
    str_to_date( m.meeting_date, "%d/%m/%Y" )) else null end AS day,
    sum(a.amount)
FROM
    applications a
    INNER JOIN meeting_application ma ON a.id = ma.application_id
    INNER JOIN meetings m ON ma.meeting_id = m.id 
GROUP BY monthName, a.id WITH ROLLUP
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...