SQL: 如何获取每个月的总付款及其每月总额
SQL: How to get the total payment for each month and its monthly total
我需要获取每个对应数据的月份。例如,我们将从日期 2020-01-08(YYYY-MM-DD) 开始获取月份。 SELECT EXTRACT(MONTH FROM "2020-01-08") 似乎只能从指定的日期获取,但我想要的很好,一次从行中获取所有月份。
我将大部分使用 ROLLUP 子条款,但对于那些不知道那是什么的人:
SELECT COALESCE(Brand, 'GrandTotal') AS Brand, SUM(Price) as 'TotalAmount'
FROM Purchase_Items
GROUP BY ROLLUP (Brand)
顺便说一句,COALESCE 将 NULL 重命名为 GrandTotal,SUM 将 Price 行中的所有数据相加。所以它会像这样出现(带有给出的样本数据):
Brand TotalAmount
-------------------------------
Apple 410000
Huawei 180000
Samsuing 261000
Xiaomi 110000
GrandTotal 961000
我的下一个结果必须看起来更像这样:
Month Brand TotalAmount
--------------------------------------------------
1 Samsung 141000
1 Monthly Total 141000
2 Apple 170000
2 Monthly Total 170000
3 Huawei 135000
3 Xiaomi 10000
3 Monthly Total 145000
4 Apple 70000
4 Xiaomi 70000
4 Monthly Total 140000
5 Apple 170000
5 Huawei 45000
5 Samsung 120000
5 Xiaomi 30000
5 Monthly Total 365000
NULL Grand Total 961000
它所做的是获取所有产品的价格,将它们相加并根据购买日期的月份进行相应排序。听起来很简单,我不知道如何在 Google 或其他常见问题解答上搜索这个想法,所以我别无选择,只能在这里提出这样的问题。我希望它不会像看起来那样误导或不清楚。
此外,我只被建议只使用 ROLLUP,所以 CUBE 和 PIVOT不是选项...
您似乎想要:
SELECT MONTH(<datecol>),
(CASE WHEN MONTH(<datecol>) IS NULL AND Brand IS NULL
THEN COALESCE(Brand, 'Grand Total')
WHEN Brand IS NULL THEN 'Month Total'
ELSE Brand
END) AS Brand,
SUM(Price) as TotalAmount
FROM Purchase_Items
GROUP BY ROLLUP (MONTH(<datecol>), Brand)
我需要获取每个对应数据的月份。例如,我们将从日期 2020-01-08(YYYY-MM-DD) 开始获取月份。 SELECT EXTRACT(MONTH FROM "2020-01-08") 似乎只能从指定的日期获取,但我想要的很好,一次从行中获取所有月份。
我将大部分使用 ROLLUP 子条款,但对于那些不知道那是什么的人:
SELECT COALESCE(Brand, 'GrandTotal') AS Brand, SUM(Price) as 'TotalAmount'
FROM Purchase_Items
GROUP BY ROLLUP (Brand)
顺便说一句,COALESCE 将 NULL 重命名为 GrandTotal,SUM 将 Price 行中的所有数据相加。所以它会像这样出现(带有给出的样本数据):
Brand TotalAmount
-------------------------------
Apple 410000
Huawei 180000
Samsuing 261000
Xiaomi 110000
GrandTotal 961000
我的下一个结果必须看起来更像这样:
Month Brand TotalAmount
--------------------------------------------------
1 Samsung 141000
1 Monthly Total 141000
2 Apple 170000
2 Monthly Total 170000
3 Huawei 135000
3 Xiaomi 10000
3 Monthly Total 145000
4 Apple 70000
4 Xiaomi 70000
4 Monthly Total 140000
5 Apple 170000
5 Huawei 45000
5 Samsung 120000
5 Xiaomi 30000
5 Monthly Total 365000
NULL Grand Total 961000
它所做的是获取所有产品的价格,将它们相加并根据购买日期的月份进行相应排序。听起来很简单,我不知道如何在 Google 或其他常见问题解答上搜索这个想法,所以我别无选择,只能在这里提出这样的问题。我希望它不会像看起来那样误导或不清楚。
此外,我只被建议只使用 ROLLUP,所以 CUBE 和 PIVOT不是选项...
您似乎想要:
SELECT MONTH(<datecol>),
(CASE WHEN MONTH(<datecol>) IS NULL AND Brand IS NULL
THEN COALESCE(Brand, 'Grand Total')
WHEN Brand IS NULL THEN 'Month Total'
ELSE Brand
END) AS Brand,
SUM(Price) as TotalAmount
FROM Purchase_Items
GROUP BY ROLLUP (MONTH(<datecol>), Brand)