【问题标题】:select two grouped by columns but only select row with the highest COUNT()选择两个按列分组但只选择 COUNT() 最高的行
【发布时间】:2019-09-13 06:42:33
【问题描述】:

我有一个包含三列的表 - 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

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

【问题讨论】:

    标签: sql sql-server


    【解决方案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()

    【讨论】:

      【解决方案2】:

      使用 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
      

      【讨论】:

        猜你喜欢
        • 2018-12-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-14
        • 1970-01-01
        • 1970-01-01
        • 2013-08-22
        • 1970-01-01
        相关资源
        最近更新 更多