ホームページ >データベース >mysql チュートリアル >MySQL テーブルから上位 N 個の最大値を効率的に抽出するにはどうすればよいですか?

MySQL テーブルから上位 N 個の最大値を効率的に抽出するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-10 03:19:02945ブラウズ

How Can I Efficiently Extract the Top N Maximum Values From a MySQL Table?

MySQL テーブルから上位 n 個の最大値を選択する

複数のデータ ポイントとグループ化特性を持つテーブルでは、上位 n 個の最大値を特定することがデータにとって重要な場合があります分析。この記事では、MySQL を使用してこれらの値を抽出する効率的なアプローチについて説明します。

GROUP BY 関数と MAX() 関数を使用した従来のアプローチでは、各グループの最大値のみが提供され、上位 n 値の選択は満たされないままになります。この制限を克服するために、マルチクエリ アプローチが採用されています。

提供されたサンプル テーブルから上位 2 つの最大値を選択するには、次のクエリを利用できます。

SELECT max(column1) m 
FROM table t
GROUP BY column2
UNION
SELECT max(column1) m
FROM table t
WHERE column1 NOT IN (SELECT max(column1) 
                      WHERE column2 = t.column2)

このクエリ期待される結果を返します:

3
4
7
8

n の任意の値については、より高度な手法を使用してランキング関数をシミュレートできます。応答でリンクされている記事には、そのようなアプローチの詳細な例が記載されています。

具体的には、変更されたクエリを使用して、目的の結果を達成できます。

SELECT t.*
FROM
   (SELECT grouper,
          (SELECT val 
           FROM table li
           WHERE li.grouper = dlo.grouper
           ORDER BY
                 li.grouper, li.val DESC
           LIMIT 2,1) AS mid
   FROM 
      (
      SELECT DISTINCT grouper
      FROM table
      ) dlo 
   ) lo, table t
WHERE t.grouper = lo.grouper
      AND t.val > lo.mid

grouper と val を適切な値に置き換えることにより、列名を指定すると、クエリは各グループに上位 n 個の最大値が含まれる結果を生成します。

サブクエリの LIMIT 句に注意することが重要です。 LIMIT n,1 という構文を使用して、n の値を制御します。 nを調整することで、任意の数の上位最大値を取得できます。

以上がMySQL テーブルから上位 N 個の最大値を効率的に抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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