sql - SQL:如何获取每个月的总付款及其每月总计
问题描述
我需要获取每个相应数据的月份。例如,我们将从日期 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)
推荐阅读
- spring - 在从 postgres 数据库中选择中对 spring 数据与 JDBI 进行基准测试
- azure - 如何在部署作业期间为 XML 转换设置 EnvironmentName?
- atom-editor - 如何修复 Atom 窗口中的杂散垂直线
- ansible - 将剧本运行中的变量保存到 ansible 主机本地文件
- html - 如何在div内添加页眉和页脚?
- redux - 混淆 createStore 在 redux 中的工作方式
- powerbi - Power BI Card 数据对齐
- c++ - 矩阵中1的最长路径
- python - 是否有另一种解决 Pythoncom 问题的方法
- reactjs - 无法通过 React 中的 url 访问另一个页面