上位 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 サイトの他の関連記事を参照してください。