获取MySQL中每个组的前N行

时间:2019-09-23 15:52:29

标签: mysql sql database

给出以下形式的MySQL表

Name   | Type
-------+-----
Bill   | A
Hill   | B
Jill   | C
Hans   | A
George | C
Sophie | B
Hannah | B
Nancy  | C
Phil   | A
...    | ...

我想产生一个MySQL查询,该查询向我提供按类型分组的前N行。 “最高”是指给定的顺序。在此示例中,可以是通过按字母顺序对类型参数进行排序(如果所有类型参数均为日期,则按日期排序)给出的顺序。例如,如果N = 2,则结果表可能是:

Name   | Type
-------+-----
Bill   | A
Hill   | B
Jill   | C
Hans   | A
George | C
Sophie | B
...    | ...

也就是说,条目很可能在结果表中被分组为各自的类型,但是它们并不是严格意义上的。我运行的是MySQL 8.x。

1 个答案:

答案 0 :(得分:4)

如果要每个组n行,请使用row_number()。如果然后希望它们交错,请使用order by

select t.*
from (select t.*,
             row_number() over (partition by type order by name) as seqnum
      from t
     ) t
where seqnum <= 2
order by seqnum, type;

这假定{top {1}}按字母顺序排列。如果您有其他定义,请为name的{​​{1}}使用。