ラボ > MySQL:ウィンドウ関数(窓関数)、group関連

mysql グループ化して各グループを〇件ずつ取得したい(row_number() over())

「group by」でグループ化した各n行ずつ欲しい

作成日:2022-11-17, 更新日:2023-01-15

基本

ウィンドウ関数(窓関数)で対応可能
※existsとかでも出来るらしいがよくわからない

▼「ウィンドウ関数(窓関数)」のメモ
mySQL 最大値を持つレコードを取得(row_number() over())

サンプル

▼3件ずつ取得

SELECT *

FROM (
  select *
  ,(
    row_number() over(
      partition by 「グループ化したいカラム」
      order by 並び順
    )
  ) max_num
  FROM テーブル
) xxx # 各グループの順番を割り振る

WHERE 1
and max_num <= 3 # 各グループのn番目まで