簡體   English   中英

MySQL-基於月份和用戶ID的WITH ROLLUP分組

[英]MySQL - Group By WITH ROLLUP Base On Month and User Id

我想顯示該的數據庫,然后顯示該總值
例如:

|    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文本。 如何不顯示重復值?

應該有一些永久性的解決方法,但這也可以解決您的問題:使用案例聲明

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM