Sql 选择两个按列分组的行,但仅选择计数最高的行()
我有一个由三列组成的表——UPC、ATTRIBUTE、STORE_NUM。我有10个存储区,每个存储区有2个具有不同属性的UPC 每个商店都有属性X或Y。I按UPC和属性分组并获取商店计数Sql 选择两个按列分组的行,但仅选择计数最高的行(),sql,sql-server,Sql,Sql Server,我有一个由三列组成的表——UPC、ATTRIBUTE、STORE_NUM。我有10个存储区,每个存储区有2个具有不同属性的UPC 每个商店都有属性X或Y。I按UPC和属性分组并获取商店计数 SELECT [UPC], [ATTRIBUTE], COUNT([STORE_NUM]) AS [COUNT] FROM TABLEA GROUP BY [UPC], [ATTRIBUTE] 结果如下: UPC ATTRIBUTE COUNT 1 X 8 1
SELECT [UPC], [ATTRIBUTE], COUNT([STORE_NUM]) AS [COUNT]
FROM TABLEA
GROUP BY [UPC], [ATTRIBUTE]
结果如下:
UPC ATTRIBUTE COUNT
1 X 8
1 Y 2
2 X 1
2 Y 9
我想选择UPC和计数最高的属性。我期望的输出是:
UPC ATTRIBUTE
1 X
2 Y
我不知道如何达到这个期望的结果。使用行号和子查询:
SELECT UPC, ATTRIBUTE
FROM (
SELECT UPC, ATTRIBUTE, ROW_NUMBER() OVER (PARTITION BY UPC ORDER BY a_count DESC) as rn
FROM ( SELECT [UPC],[ATTRIBUTE],COUNT([STORE_NUM]) AS [a_COUNT]
FROM TABLEA
GROUP BY [UPC],[ATTRIBUTE]
) t
) q
WHERE q.rn = 1
使用行号和子查询:
SELECT UPC, ATTRIBUTE
FROM (
SELECT UPC, ATTRIBUTE, ROW_NUMBER() OVER (PARTITION BY UPC ORDER BY a_count DESC) as rn
FROM ( SELECT [UPC],[ATTRIBUTE],COUNT([STORE_NUM]) AS [a_COUNT]
FROM TABLEA
GROUP BY [UPC],[ATTRIBUTE]
) t
) q
WHERE q.rn = 1
可以将窗口函数与聚合一起使用:
SELECT *
FROM (SELECT [UPC], [ATTRIBUTE], COUNT(*) AS [COUNT],
ROW_NUMBER() OVER (PARTITION BY UPC ORDER BY COUNT(*) DESC) as seqnum
FROM TABLEA
GROUP BY [UPC], [ATTRIBUTE]
) x
WHERE seqnum = 1;
如果您希望在出现平局时使用重复项,请使用
RANK()
。您可以将窗口函数与聚合一起使用:
SELECT *
FROM (SELECT [UPC], [ATTRIBUTE], COUNT(*) AS [COUNT],
ROW_NUMBER() OVER (PARTITION BY UPC ORDER BY COUNT(*) DESC) as seqnum
FROM TABLEA
GROUP BY [UPC], [ATTRIBUTE]
) x
WHERE seqnum = 1;
如果您希望在打领带时使用重复的,请使用RANK()