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
クエリの内訳:
括弧で囲まれたサブクエリは、各生徒のスコアのランクを計算します。
出力:
このクエリを実行すると、次の結果が返されます:
NAME | SCORE |
---|---|
willy | 2 |
willy | 3 |
zoe | 5 |
zoe | 6 |
このクエリは、上位 2 つを効果的に取得します。各生徒のスコアを表示し、単純な MAX() 集計を使用する場合と比較して、生徒の成績をより包括的に把握できます。
以上がSQL で各グループの上位 2 つのスコアを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。