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

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

Patricia Arquette
リリース: 2024-12-29 11:05:11
オリジナル
598 人が閲覧しました

How to Get the Top Two Rows for Each Group in SQL?

SQL で各グループの上位 2 行を取得する

SQL クエリを使用すると、ユーザーはテーブルから特定のデータを抽出できますが、必要な場合はどうすればよいですか各グループの上部 2 行を選択するには?このシナリオは、最高スコアのレコードを分析する場合、またはグループ内の複数の値を取得する場合に発生する可能性があります。

次の表を例として考えてみましょう。

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

各名前の最高 2 つのスコアを取得するには、次の SQL クエリを利用できます:

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) は、テスト テーブルからすべての行を選択します。
  • 括弧で囲まれた内部クエリは、テーブル内の行数を計算します。指定された名前と現在の行のスコア以上のスコアを持つテーブルをテストします (f.score >= s.score).
  • 外部クエリの WHERE 句は、内部クエリからのカウントに基づいて行をフィルタリングします。カウントが 2 以下の行のみが選択されます。これにより、各グループの上位 2 つのスコアが確実に取得されます。

このクエリで期待される出力は次のとおりです:

NAME SCORE
willy 2
willy 3
zoe 5
zoe 6

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

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