首页 > 解决方案 > 通过返回重复项聚合不带组

问题描述

我有以下数据。

Property, Value
Odd,1
Even,2
Odd,3
Even,4
Odd,5
Even,6

使用 GROUP BY

SELECT Property, COUNT(*) FROM Tab1 GROUP BY Property

结果:

Property, COUNT(*)
Odd 3
Even 3

但是当我使用聚合函数时,它会返回重复值。

SELECT property,count(*) over (partition by property) AS count
FROM Tab1;

结果

Property, count
Even 3
Even 3
Even 3
Odd 3
Odd 3
Odd 3

我希望得到与使用 GROUP BY 相同的结果。


SELECT property, count FROM (
SELECT property,count(*) over (partition by property) AS count
FROM Tab1) AS tab2;

除了这个还有其他方法吗?

标签: sql-servergroup-byaggregate-functions

解决方案


这就是窗口函数的工作原理;您会为源表中的每一行返回一行,而不是像使用GROUP BY. 您可以使用以下方法获得相同的结果SELECT DISTINCT

SELECT DISTINCT property,
       COUNT(*) OVER (PARTITION BY property) AS count
FROM Tab1

dbfiddle 上的演示


推荐阅读