ホームページ >データベース >mysql チュートリアル >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 サイトの他の関連記事を参照してください。