MySQL は各グループの最初の N 行のデータを効率的に取得します
問題の説明:
データベース クエリでは、各データ グループの最初の N 行のデータのみを取得する必要がある場合があります。たとえば、データセットには、年と ID でグループ化された複数行の情報が含まれている場合があります。 ID ごとに評価の高い上位 5 件のレコードを表示したい場合は、結果を目的の数に制限するメソッドを実装する必要があります。
解決策:
MySQL 8 以降では、ROW_NUMBER、RANK、または DENSE_RANK 関数を使用してこれを実現できます。選択する特定の関数は、「最初の N 行」の正確な定義と、並列状況を処理する方法によって異なります。これらの関数によって生成された結果の内訳は次のとおりです:
例:
次のクエリは ROW_NUMBER 関数を使用して、各 ID の最初の 5 行を評価の降順に並べて返します。
<code class="language-sql">SELECT year, id, rate FROM ( SELECT year, id, rate, ROW_NUMBER() OVER (PARTITION BY id ORDER BY rate DESC) AS rank_num FROM h WHERE year BETWEEN 2000 AND 2009 ) AS subquery WHERE rank_num <= 5;</code>
出力:
year | id | rate |
---|---|---|
2006 | p01 | 8.0 |
2003 | p01 | 7.4 |
2008 | p01 | 6.8 |
2001 | p01 | 5.9 |
2007 | p01 | 5.3 |
2001 | p02 | 12.5 |
2004 | p02 | 12.4 |
2002 | p02 | 12.2 |
2003 | p02 | 10.3 |
2000 | p02 | 8.7 |
これらの関数を使用すると、結果を各グループの最初の N 行に効果的に制限し、データを望ましい順序で並べることができます。
以上がMySQL でグループごとに上位 N 行のみを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。