使用GROUP BY和OVER

Fed*_*ico 4 sql sql-server

我试图按年份和国家分组总销售额.这按预期工作:

SELECT Year, Country, SUM([Total Sales])
FROM Table
GROUP BY Country, Year;
Run Code Online (Sandbox Code Playgroud)

然后,我必须比较每个国家对一年总销售额的贡献.我这样做了:

SELECT Year, Country, SUM([Total Sales]),
    SUM([Total Sales]) OVER(PARTITION BY Year) 
FROM Table
GROUP BY Country, Year;
Run Code Online (Sandbox Code Playgroud)

这给了我这个错误:

列'Table.Total Sales'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中.

Gor*_*off 8

您需要嵌套总和:

SELECT Year, Country, SUM([Total Sales]),
       SUM(SUM([Total Sales])) OVER (PARTITION BY Year) 
FROM Table
GROUP BY Country, Year;
Run Code Online (Sandbox Code Playgroud)

第一次看到它时,这种语法有点时髦.但是,窗函数进行评估GROUP BY.这说的是总销售额的总和...正是你想要的.