SQL

【MySQL】それぞれのグループからn件ずつレコードを取り出す方法

あるテーブルを特定のカラムでグループに分けて, それらのグループからn件ずつデータを取り出す方法です。

上記のSQL文ではn=8でデータを取り出しています。

phpなどで, 言語のバージョンが古くて上記のコードが使えない場合には, 以下の方法で実現することができます。

少々理解するのか難しいSQL文になってしまいましたが, これでn件ずつデータを取り出すことができます。

しかし, このSQL文で注意しておきたいこととして, この場合はdateカラムに関して条件を指定して8件ずつ取り出そうとしているわけですが, 例えばcategoryとdateが全く同じレコードが10件だけ存在しているテーブルがあるとすると,

の条件に引っかかるレコード数は0になり, 常に8以下になってしまいます。

すると, カテゴリごとに8件ずつ取り出したいにも関わらず, 10件取り出されてしまうことになります。

したがって, 絶対にn件ずつ取り出したときや, dateのような条件に指定するカラムがユニークではない場合, あるいは同じ値が複数存在する場合には, この方法はあまり使用しない方がいいでしょう。