MySQL: 上位 N 個の最大値の選択
特定の行で最大値を持つ上位 N 行を取得しようとすると、混乱がよく発生します。カラム。問題は、上位 N 行のみを返すか、同じ最大値を共有する場合に追加の行を含めるかどうかです。
前者を実現するには、次のクエリで十分です。
SELECT * FROM t ORDER BY value DESC LIMIT N
Thisクエリでは、他の行が同じ最大値を持つかどうかに関係なく、上位 N 行のみが返されることが保証されます。
ただし、同じ最大値を持つ行を含めることが要件の場合は、より複雑なクエリが必要です。
SELECT * FROM t JOIN ( SELECT MIN(value) AS cutoff FROM ( SELECT value FROM t ORDER BY value LIMIT N ) tlim ) tlim ON t.value >= tlim.cutoff;
別の方法として、クエリを簡略化することもできます:
SELECT * FROM t JOIN ( SELECT value FROM t ORDER BY value LIMIT N ) tlim ON t.value = tlim.value;
最後に、別の方法では ANY 関数を使用しますが、MySQL との互換性は異なる場合があります:
SELECT * FROM t WHERE t.value >= ANY ( SELECT value FROM t ORDER BY value LIMIT N )
このアプローチには、同じ最大値を持つ行も含まれており、問題に対する概念的に明確な解決策が提供されます。
以上がMySQL で上位 N 個の最大値を選択する方法: N 行のみを返すか、それとも同数を含めるか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。