我有一个表,其初始值为:
+---------------------------------------+
| Entity Country Month_No. Reports |
+---------------------------------------+
| FC US 10 2 |
| FC US 10 3 |
| FC GER 10 4 |
| FC GER 10 7 |
| FC US 11 5 |
| FC GER 11 8 |
+---------------------------------------+
我尝试使用以下代码在此表上运行查询:
SELECT entity, country, mnth, SUM(reports) OVER (PARTITION BY mnth) FROM practice1;
我从这段代码中得到的输出是:
+---------------------------------------+
| Entity Country Month_No. Reports |
+---------------------------------------+
| FC US 10 16 |
| FC US 10 16 |
| FC GER 10 16 |
| FC GER 10 16 |
| FC US 11 13 |
| FC GER 11 13 |
+---------------------------------------+
预期输出应如下所示:
+---------------------------------------+
| Entity Country Month_No. Reports |
+---------------------------------------+
| FC US 10 5 |
| FC GER 10 11 |
| FC US 11 5 |
| FC GER 11 8 |
+---------------------------------------+
如何获得此输出?
答案 0 :(得分:2)
您的问题可以通过简单的group by
来解决:
SELECT entity, country, mnth, SUM(reports)
FROM practice1
GROUP BY entity, country, mnth
答案 1 :(得分:1)
您要按月汇总报告,而不是按实体,国家和月份汇总。在partition by
子句中添加实体和国家即可获得所需的数字,但是现在有一些重复的行,因为有多个行具有相同的实体,国家和月份。您可以添加distinct
来消除这些问题。
SELECT distinct entity, country, mnth,
SUM(reports) OVER (PARTITION BY entity, country, mnth)
FROM practice1;
您需要使用partition by
吗?似乎您最好只使用group by
。
SELECT entity, country, mnth, SUM(reports)
FROM practice1;
GROUP BY entity, country, mnth