SQL分区查询中的输出不正确

时间:2019-06-22 20:38:14

标签: sql

我有一个表,其初始值为:

+---------------------------------------+
| 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    |
+---------------------------------------+

如何获得此输出?

2 个答案:

答案 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