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

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

DDD
リリース: 2025-01-25 12:11:08
オリジナル
379 人が閲覧しました

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 関数を使用します。

SELECT PKID, CATID, value,
ROW_NUMBER() OVER (PARTITION BY CATID ORDER BY value DESC) AS RowNum
FROM table_name;
ログイン後にコピー

ROW_NUMBER は、CATID の順 (この場合は降順) で、各 value グループ内に一意のランクを割り当てます。 上位 5 件のみをフィルターするには、これをサブクエリでラップします:

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;
ログイン後にコピー

この洗練されたクエリは、カテゴリごとに上位 5 行のみを効率的に取得し、データ取得のニーズに正確で最適化されたソリューションを提供します。 <= 5 条件を調整して、グループごとに必要な上位行の数を制御することを忘れないでください。

以上がMySQLの各グループの上部N行を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート