【问题标题】:Aggregate WITHOUT Group By returning duplicates通过返回重复项聚合不带组
【发布时间】:2020-11-04 22:45:55
【问题描述】:

我有以下数据。

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-server group-by aggregate-functions


    【解决方案1】:

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

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

    Demo on dbfiddle

    【讨论】:

      猜你喜欢
      • 2016-12-29
      • 2023-03-21
      • 2023-02-13
      • 2020-09-05
      • 1970-01-01
      • 2022-06-18
      • 2013-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多