ホームページ  >  記事  >  データベース  >  MySQL でランクをシミュレートして上位 n 個の最大値を選択する方法

MySQL でランクをシミュレートして上位 n 個の最大値を選択する方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-10 15:40:03776ブラウズ

How to Simulate Rank in MySQL to Select Top n Maximum Values?

上位 n 個の最大値を選択するための MySQL でのランクのシミュレーション

テーブルから上位 n 個の最大値を選択することは、特に MySQL では困難な場合があります。必要な n がテーブル内の個別のグループの数より大きい場合。

ユニオン クエリを使用した上位 n の最大値の近似

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)

このクエリは、最初に各グループの最大値を見つけてから、どのグループの最大値にもなっていないすべての値の 2 番目の最大値を見つけます。

ランク シミュレーションの利用

任意の n について、他の場所で説明されている手法を使用して、パーティション全体のランクをシミュレートできます。そのようなアプローチの 1 つは、各グループの 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

このクエリでは、LIMIT 2,1 によって n の値が 2 に設定されます。 grouper をグループ化列に置き換えます。 name と val は、特定のシナリオの値列名に置き換えます。

以上がMySQL でランクをシミュレートして上位 n 個の最大値を選択する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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