我有一个表,该表由三列组成-UPC,ATTRIBUTE,STORE_NUM。我有10家商店和2家UPC,每家都有不同的ATTRIBUTE。
每个商店都具有X或Y属性。我按UPC和ATTRIBUTE分组,并获取商店计数。
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和ATTRIBUTE。我想要的输出是这样:
UPC ATTRIBUTE
1 X
2 Y
我不知道如何达到期望的结果。
答案 0 :(得分:1)
使用row_number和一个子查询:
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
答案 1 :(得分: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()
。