コンテンツにスキップ

SQLServer グループごとに上位3位までを表示する

ROW_NUMBDR

結果セットの出力に番号(クエリ実行時の一時的な値)を設定して抽出

名前が同じで、年齢がバラバラの動物テーブルを例とする
example

Usage

SELECT *
    FROM (
        SELECT
            NAME,
            AGE,
            ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY AGE DESC ) AS NUMBER
        FROM
            ZOO
    ) AS ZOO
WHERE
    NUMBER <= 3;

動物の名前ごとに、年齢順に上位3位が表示される
result

Reference

ROW NUMBER
ORDER BY