ホームページ >データベース >mysql チュートリアル >MySQLの各グループの上部N行を取得するにはどうすればよいですか?
MySQL の各グループの上位 N 行の抽出
MySQL データ内のグループごとに上位 N 行をフェッチする必要がありますか? 標準的な順序では、必ずしも期待した結果が得られるとは限りません。 このガイドでは、ROW_NUMBER
、RANK
、DENSE_RANK
などの MySQL の強力なウィンドウ関数を使用して、これを効率的に実現する方法を説明します。
PKID
(主キー)、CATID
(カテゴリー)、および value
列を持つテーブルを想像してください。各 CATID
の上位 5 行を取得するには、ROW_NUMBER
関数を使用します。
<code class="language-sql">SELECT PKID, CATID, value, ROW_NUMBER() OVER (PARTITION BY CATID ORDER BY value DESC) AS RowNum FROM table_name;</code>
ROW_NUMBER
は、CATID
の順 (この場合は降順) で、各 value
グループ内に一意のランクを割り当てます。 上位 5 件のみをフィルターするには、これをサブクエリでラップします:
<code class="language-sql">SELECT PKID, CATID, value FROM ( SELECT PKID, CATID, value, ROW_NUMBER() OVER (PARTITION BY CATID ORDER BY value DESC) AS RowNum FROM table_name ) AS subquery WHERE RowNum <= 5;</code>
この洗練されたクエリは、カテゴリごとに上位 5 行のみを効率的に取得し、データ取得のニーズに正確で最適化されたソリューションを提供します。 <= 5
条件を調整して、グループごとに必要な上位行の数を制御することを忘れないでください。
以上がMySQLの各グループの上部N行を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。