给出以下形式的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。
答案 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}}使用。