ホームページ >データベース >mysql チュートリアル >MySQLの各グループの上部N行を取得するにはどうすればよいですか?

MySQLの各グループの上部N行を取得するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-25 12:11:08346ブラウズ

How to Get the Top N Rows for Each Group in MySQL?

MySQL の各グループの上位 N 行の抽出

MySQL データ内のグループごとに上位 N 行をフェッチする必要がありますか? 標準的な順序では、必ずしも期待した結果が得られるとは限りません。 このガイドでは、ROW_NUMBERRANKDENSE_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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。