Sql server 按计数每个组返回的记录数
我有一个一般性问题,例如:Sql server 按计数每个组返回的记录数,sql-server,aggregate-functions,Sql Server,Aggregate Functions,我有一个一般性问题,例如: SELECT col1, col2, col3, col4 FROM Table1 AS t1 GROUP BY col1, col2, col3, col4 它将返回一个类似于以下内容的表: col1 col2 col3 col4 data1 data2 data3 data4 data1 data2 data3 data5 data10 data11 data12 data13 data10 data11 data12 data1
SELECT col1, col2, col3, col4
FROM Table1 AS t1
GROUP BY col1, col2, col3, col4
它将返回一个类似于以下内容的表:
col1 col2 col3 col4
data1 data2 data3 data4
data1 data2 data3 data5
data10 data11 data12 data13
data10 data11 data12 data14
data10 data11 data12 data15
我需要获取col1的计数,以显示返回两次的data1和返回三次的data10。该表应该如下所示:
col1 col2 col3 col4 Count
data1 data2 data3 data4 2
data1 data2 data3 data5 2
data10 data11 data12 data13 3
data10 data11 data12 data14 3
data10 data11 data12 data15 3
我在select语句中尝试了count(*),但不起作用。您可以使用
OVER
子句(SQL Server 2008+):
结果是:
╔════════╦════════╦════════╦════════╦═══════╗
║ COL1 ║ COL2 ║ COL3 ║ COL4 ║ COUNT ║
╠════════╬════════╬════════╬════════╬═══════╣
║ data1 ║ data2 ║ data3 ║ data4 ║ 2 ║
║ data1 ║ data2 ║ data3 ║ data5 ║ 2 ║
║ data10 ║ data11 ║ data12 ║ data13 ║ 3 ║
║ data10 ║ data11 ║ data12 ║ data14 ║ 3 ║
║ data10 ║ data11 ║ data12 ║ data15 ║ 3 ║
╚════════╩════════╩════════╩════════╩═══════╝
有一个演示
更新
如果需要基于计数列进行筛选,可以使用派生表或CTE:
派生表:
SELECT *
FROM ( SELECT col1, col2, col3, col4, COUNT(*) OVER(PARTITION BY col1) [Count]
FROM Table1) A
WHERE [Count] > 2
CTE:
结果:
╔════════╦════════╦════════╦════════╦═══════╗
║ COL1 ║ COL2 ║ COL3 ║ COL4 ║ COUNT ║
╠════════╬════════╬════════╬════════╬═══════╣
║ data10 ║ data11 ║ data12 ║ data13 ║ 3 ║
║ data10 ║ data11 ║ data12 ║ data14 ║ 3 ║
║ data10 ║ data11 ║ data12 ║ data15 ║ 3 ║
╚════════╩════════╩════════╩════════╩═══════╝
.我可以添加having或where子句,只抓取计数大于2的人吗?@Andrew用过滤器更新了我的答案再次感谢您的帮助!!
;WITH CTE AS
(
SELECT col1, col2, col3, col4, COUNT(*) OVER(PARTITION BY col1) [Count]
FROM Table1
)
SELECT *
FROM CTE
WHERE [Count] > 2
╔════════╦════════╦════════╦════════╦═══════╗
║ COL1 ║ COL2 ║ COL3 ║ COL4 ║ COUNT ║
╠════════╬════════╬════════╬════════╬═══════╣
║ data10 ║ data11 ║ data12 ║ data13 ║ 3 ║
║ data10 ║ data11 ║ data12 ║ data14 ║ 3 ║
║ data10 ║ data11 ║ data12 ║ data15 ║ 3 ║
╚════════╩════════╩════════╩════════╩═══════╝