SQL row_numberで出力したランキングの値を横表示に変換する
解決したいこと
SQLでランキングを正しく横変換したい(postgres)
例)
年別商品売上トップ3をrow_number関数で表示させたがそれを横変換したい
postgres環境
該当するソースコード(横表示したい)
select 年
, case when 年別ランキング = 1
then 商品名
end as 一位
, case when 年別ランキング = 2
then 商品名
end as 二位
, case when 年別ランキング = 3
then 商品名
end as 三位
from
(select
年
, 商品名
, 売上金額
, 年別ランキング
from
(
select
extract(year from ph.purchase_datetime) as 年
, item.item_name as 商品名
, sum(ph.total_amount) as 売上金額
, row_number() over (
partition by
extract(year from ph.purchase_datetime)
order by
sum(ph.total_amount) desc
) as 年別ランキング
from
mst_item item
inner join tbl_purchase_history ph
on item.item_id = ph.item_id
group by
年
, 商品名
) as サブクエリ一回目 ) as サブクエリ二回目
group by 年, 一位, 二位, 三位
--where 一位 is not null and 二位 is not null and 三位 is not null
order by 年
通常のソースコード)
select
年
, 商品名
, 売上金額
, 年別ランキング
from
(
select
extract(year from purchase_datetime) as 年
, item.item_name as 商品名
, sum(ph.total_amount) as 売上金額
, row_number() over (
partition by
extract(year from purchase_datetime)
order by
sum(ph.total_amount) desc
) as 年別ランキング
from
mst_item item
inner join tbl_purchase_history ph
on item.item_id = ph.item_id
group by
年
, 商品名
) as サブクエリ名前?
where
年別ランキング <= 3
order by
年, 売上金額 desc
自分で試したこと
0