MySQL Advanced SUM和GroupBy Month案例

qeeaahzv  于 2023-04-10  发布在  Mysql
关注(0)|答案(2)|浏览(111)

我有以下查询,但我被卡住了,不确定下一步该如何处理我们的博物馆管理应用程序。

SELECT name,
       account_number,
       CASE
           WHEN p.method = 'cash'
                OR p.method = 'mo'
                OR p.method = 'check'
                THEN
                    MONTH(p.created_at)
                    ELSE
                        MONTH(p2.created_at)
                        END

FROM cemetery_charge_types
LEFT JOIN invoices i on cemetery_charge_types.id = i.charge_type_id
LEFT JOIN payment_details pd on i.id = pd.payable_id
LEFT JOIN payments p on pd.payment_id = p.id
LEFT JOIN payouts p2 on p.payout_id = p2.id
BETWEEN '2022-06-01 00:00:00' AND '2022-06-30 00:00:00'
WHERE cemetery_charge_types.category = 'Court'
GROUP BY account_number
ORDER BY account_number

如果p(付款)method是“现金,mo或支票”,我想按p.created_atpd.amount的SUM的月份分组。
但是,如果p(支付)method是“卡或终端”,我想按p2.created_at的月份分组。
我仍然希望它按account_number分组,并将两组的总和相加。
因此,如果现金,支票或mo方法在第6个月的总金额为100美元,第7个月的总金额为0美元。如果卡和终端方法在第6个月的总金额为50美元,第7个月的总金额为75美元,我希望它看起来像:
ACCT # MONTH 6 MONTH 7
Account 1 $150 $75
这是可能的吗?或者有人建议我去哪里看?

8yparm6h

8yparm6h1#

图案:

SELECT {common columns},
       CASE WHEN {condition 1} THEN {expression 1}
            WHEN {condition 2} THEN {expression 2}
            END AS grouping_expression,
       SUM( CASE WHEN {condition 1} THEN {value 1}
                 WHEN {condition 2} THEN {value 2}
                 END ) AS result_expression
FROM {tableset}
GROUP BY {common columns}, 
         grouping_expression
os8fio9y

os8fio9y2#

带有示例数据的表结构将有助于理解问题。CASE语句必须作为Group子句的一部分。

相关问题