MySQL テーブルの上位 N 位の最大値の検索
データ分析とレポートでは、多くの場合、特定の列の最大値。ただし、複数のレコードが N 番目の位置付近で同じ最大値を共有する場合、あいまいさが発生する可能性があります。
質問:
SQL を使用して、最も高い上位 N 行を選択する場合特定の列の値を取得する場合、クエリは上位 N 行のみを返すべきですか、それとも同じ最大値を持つ追加の行を含めるべきですか?
答え:
答えは次のいずれかによって異なります。重複する上位値を含めるか除外したい場合。ここでは 2 つのアプローチを示します。
アプローチ 1: 重複する上位値を除外する
重複のない上位 N 行のみを取得するには、次のクエリを使用します。
SELECT * FROM t ORDER BY value DESC LIMIT N
このクエリでは、LIMIT N 句により、結果セットが上位 N 行に制限され、N 行目以下の同じ最大値を持つ行は除外されます。
アプローチ 2: 先頭の重複を含める値
重複に関係なく、最も高い値を持つすべての行を取得するには、次のクエリを使用します。
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;
このクエリは、サブクエリを使用して、次の行のカットオフ値を決定します。 N 番目に高い値。次に、ON 句を使用してこのサブクエリをメイン テーブルと結合し、カットオフ以上の値を持つ行をフィルタリングします。
追加の考慮事項:
以上が上位 N 個の SQL クエリには重複する最大値を含めるべきですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。