ホームページ > データベース > mysql チュートリアル > SQL で各グループの上位 2 つのスコアを取得するにはどうすればよいですか?

SQL で各グループの上位 2 つのスコアを取得するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-03 05:21:37
オリジナル
830 人が閲覧しました

How to Retrieve the Top Two Scores for Each Group in SQL?

SQL で個々のグループの上位 2 つのスコアを取得する

リレーショナル データベースでは、大規模なデータセットから意味のあるデータを抽出する場合、多くの場合、レコードに基づいてグループ化する必要があります。特定の特性について。グループ化されたセットからデータを取得する場合、集計関数を使用して各グループ内の最高値または最低値を取得するのが一般的です。ただし、各グループの上位 N 行を選択する必要がある場合はどうすればよいでしょうか?

学生の名前と対応するスコアを含む次の表を考えてみましょう:

NAME SCORE
willy 1
willy 2
willy 3
zoe 4
zoe 5
zoe 6

グループ化の集計関数で許可されるのは、各名前の最高スコアを取得します。各生徒の上位 2 つのスコアを取得するには、別のアプローチが必要です。

次のクエリは、サブクエリを使用してこれを実現し、それぞれのグループ内の各生徒のスコアのランクを追跡します。

SELECT *
FROM test s
WHERE 
        (
            SELECT COUNT(*) 
            FROM test f
            WHERE f.name = s.name AND 
                  f.score >= s.score
        ) <= 2
ログイン後にコピー

クエリの内訳:

  • 外側のクエリ、 SELECT * FROM test s は、テスト テーブルからすべての行を取得し、それらを s としてエイリアスします。
  • 括弧で囲まれたサブクエリは、各生徒のスコアのランクを計算します。

    • SELECT COUNT(*) FROM test f: この部分は、名前 (f.name) が含まれるテスト テーブル内の行数をカウントします。現在の行の名前 (s.name) と一致し、スコア (f.score) が現在の行のスコア (s.score) 以上です。
  • WHERE 句は外部クエリにフィルタを適用し、ランク (サブクエリによって決定される) 以下の行のみを選択します。 2.

出力:

このクエリを実行すると、次の結果が返されます:

NAME SCORE
willy 2
willy 3
zoe 5
zoe 6

このクエリは、上位 2 つを効果的に取得します。各生徒のスコアを表示し、単純な MAX() 集計を使用する場合と比較して、生徒の成績をより包括的に把握できます。

以上がSQL で各グループの上位 2 つのスコアを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート