如何计算每组的数字?

时间:2012-08-01 21:01:12

标签: sql-server

假设有一个结果集......我需要像这样打印出来:

ID  Count
1    5
1    5 
1    5
1    5
1    5
2    2
2    2
3    1

提前致谢。

2 个答案:

答案 0 :(得分:8)

您可以将count() OVER clause

一起使用
select a, count(*) over (partition by a) as [count]
from tableName ;

它被称为窗口功能。我建议你研究这些。

答案 1 :(得分:8)

你的意思是你的查询:

SELECT ID, COUNT(*) AS "Count"
FROM tableX
GROUP BY ID ;

产生这个:

ID  Count
1    5
2    2
3    1

但你想要这个吗?:

ID  Count
1    5
1    5 
1    5
1    5
1    5
2    2
2    2
3    1

然后,此查询将执行:

SELECT grp.ID, grp."Count"
FROM 
        tableX AS t
    JOIN
        ( SELECT ID, COUNT(*) AS "Count"
          FROM tableX
          GROUP BY ID 
        ) AS grp
      ON grp.ID = t.ID ;

它几乎适用于所有DBMS和所有版本的SQL-Server。对于SQL-Server版本2005及更新版本(以及Oracle和Postgres),OVER子句的答案看起来更优雅,可能更受欢迎。在您的版本中测试哪一个更有效。我认为在2012版本中,带有OVER子句的查询非常有效。