Sql 选择两个按列分组的行,但仅选择计数最高的行()

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

我有一个由三列组成的表——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      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()