sql

あるグループごとに上位〇件ずつデータを取得して比較したいという際にwindow関数を使う。

テーブル

sales_t

categoryproductsales
食品りんご30
食品みかん20
食品バナナ10
筆記用具ペン40
筆記用具消しゴム10
筆記用具赤ペン30

categoryごとに上位2件ずつ取得する

select * from (
    select category
        , product
        , row_number() over (partition by category order by sales desc) as row
    from sales_t
)
where row <= 2;

件数の多いものから取得する

select * from (
    select category
        , product
        , count(*) as cnt
        , row_number() over (partition by category order by count(*) desc) as row
    from sales_t
)
where row <= 2;