簡體   English   中英

獲取MySQL中每組的前N行

[英]Get top N rows of each group in MySQL

給定表格的 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。

如果您想要每組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”是按字母順序排列的name 如果您有其他定義,請將其用於row_number()order by

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM