ホームページ >データベース >mysql チュートリアル >SQLでグループごとの上位N行を取得するにはどうすればよいですか?
SQLスキル:以前のNラインデータをグループで取得しますこの記事では、SQLデータベースから各グループのフロントNラインデータを効率的に抽出する方法を紹介します。この目標を達成するには、row_number()、rank()、dense_rank()などのウィンドウ関数を使用します。これらの関数は、指定されたパーティションで一意の識別子を生成できます。これは、グループ化や行の選択に非常に適しています。
row_number()を使用します row_number()関数は、各パーティションの1から始まる連続シリアル番号です。 この例では、row_number()は「rn」という新しいリストを作成して、各
グループの各行のシリアル番号を割り当てます。
rank()およびdense_rank() <code class="language-sql">SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY rate DESC) AS rn FROM h WHERE year BETWEEN 2000 AND 2009</code>を使用します
id
rank()およびdense_rank()関数は、グループラインの数字に別の方法を提供します。 rank()は同じソート行を持つ非繰り返し値であり、dense_rank()は連続値を割り当てます。rank()およびdense_rank()は、それぞれ「rk」と「dr」列を作成し、各列と密集したランキングがグループにあることを示しています。
制限または上限の結果と組み合わされています
<code class="language-sql">SELECT *, RANK() OVER (PARTITION BY id ORDER BY rate DESC) AS rk, DENSE_RANK() OVER (PARTITION BY id ORDER BY rate DESC) AS dr FROM h WHERE year BETWEEN 2000 AND 2009</code>各パケットに一意の識別子を割り当てた後、各グループの指定された行を制限または上部修飾子を使用して使用できます。
この例では、制限修飾子は各id
グループの上位5行を取得します。必要に応じて番号を調整できます。
以上がSQLでグループごとの上位N行を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。