sql-server - 统计每个组返回的记录数

标签 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 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+):

SELECT col1, col2, col3, col4, COUNT(*) OVER(PARTITION BY col1) [Count]
FROM Table1 AS t1

结果是:

╔════════╦════════╦════════╦════════╦═══════╗
║  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 ║
╚════════╩════════╩════════╩════════╩═══════╝

Here is a sqlfiddle有一个演示。

更新 如果您需要根据 COUNT 列进行筛选,可以使用派生表或 CTE:

派生表:

SELECT *
FROM (  SELECT col1, col2, col3, col4, COUNT(*) OVER(PARTITION BY col1) [Count]
        FROM Table1) A
WHERE [Count] > 2

热膨胀系数:

;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 ║
╚════════╩════════╩════════╩════════╩═══════╝

sqlfiddle with this option .

关于sql-server - 统计每个组返回的记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16923508/

相关文章:

php - 有没有办法将各种 MYSQL 查询与多个 WHERE 子句结合起来?

java - 关于在 3 ignite 服务器集群上使用 sql 查询获取数据的问题

python - 运行并发请求时获取 "Invalid cursor state (0)"(SQLAlchemy & wsgi/python)

sql - SQLite 中的递归 CTE

sql - 按任意时间间隔计算行数的最佳方法

mysql - 将两个不同表中的两列相乘并将它们组合在一起

mysql - 使用 Sum 聚合时需要 ID 列不区分

java.lang.UnsatisfiedLinkError : Native Library sqljdbc_auth. dll 已经加载到另一个类加载器中

java - Hibernate与sql server检索数据遇到意外的未知 token

mysql - PHP 查询不起作用