ホームページ  >  記事  >  データベース  >  上位 N 個の SQL クエリには重複する最大値を含めるべきですか?

上位 N 個の SQL クエリには重複する最大値を含めるべきですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-14 15:26:02414ブラウズ

Should Top N SQL Queries Include Duplicate Maximum Values?

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 番目の行が重複していない場合、アプローチ 1 は上位 N 行のみを返します。
  • アプローチ 2 は、常に N 番目に大きい値を持つすべての行を返します。これは、重複の結果かどうかです。
  • クエリのパフォーマンスは、テーブルのサイズとインデックス作成によって異なる場合があります。

以上が上位 N 個の SQL クエリには重複する最大値を含めるべきですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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