代码之家  ›  专栏  ›  技术社区  ›  Martin AJ

如何获得每组的第一行?

  •  1
  • Martin AJ  · 技术社区  · 3 年前

    select count(1) num, business_id, category_id
    from mytable
    group by business_id, category_id
    order by num desc
    

    结果如下所示:

    // res
    +-----+-------------+-------------+
    | num | business_id | category_id |
    +-----+-------------+-------------+
    | 22  | 5543        | 8           |
    | 19  | 4352        | 8           |
    | 13  | 3242        | 11          |
    | 10  | 2132        | 11          |
    | 7   | 6832        | 8           |
    +-----+-------------+-------------+
    

    现在我想得到每一个的第一行 category_id num 及其 business_id 。因此,预期的结果是:

    // expected res
    +-----+-------------+-------------+
    | num | business_id | category_id |
    +-----+-------------+-------------+
    | 22  | 5543        | 8           |
    | 13  | 3242        | 11          |
    +-----+-------------+-------------+
    

    2 回复  |  直到 3 年前
        1
  •  2
  •   D-Shih    3 年前

    如果您的MySQL版本支持 ROW_NUMBER 行号 得到最大的 num 通过 category_id

    问题#1

    SELECT num,business_id,category_id
    FROM (
        SELECT *,ROW_NUMBER() OVER(PARTITION BY category_id ORDER BY num desc) rn
        FROM (
            select count(1) num, business_id, category_id
            from mytable
            group by business_id, category_id
        ) t1
    ) t1
    WHERE rn = 1
    
    业务id 类别识别码
    22 8.
    13 11

    View on DB Fiddle

        2
  •  1
  •   forpas    3 年前

    MAX() num FIRST_VALUE() 得到 business_id 那个马克斯 号码 :

    SELECT DISTINCT 
           MAX(COUNT(*)) OVER (PARTITION BY category_id) num, 
           FIRST_VALUE(business_id) OVER (PARTITION BY category_id ORDER BY COUNT(*) DESC) business_id, 
           category_id
    FROM mytable
    GROUP BY business_id, category_id
    ORDER BY num DESC;