选择按列分组的两个,但仅选择具有最高COUNT()的行

时间:2019-09-12 21:56:33

标签: sql sql-server

我有一个表,该表由三列组成-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

我不知道如何达到期望的结果。

2 个答案:

答案 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()