現有如下的數據 需要統計三餐消費中哪一餐消費最高,思路是先進行列轉行 再使用row_number() over()函數進行排名可以獲取排名 再取pm=1的數據
| xh | zcxfje(早餐) | wcxfje(中餐) | wacxfje(晚餐) |
| 1000 | 26975 | 126535 | 42310 |
| 1001 | 3490 | 85200 | 36780 |
語句實現如下:
with tmp_table as (
select xh, zczje as sczje,'早餐' as sclx from (
select xh,sum(zcxfje)as zczje,
sum(wcxfje)as wczje,sum(wacxfje)as waczje
from adm.edu_app_ykt_scxf
GROUP BY xh )as tab1
union all
select xh, wczje as sczje ,'午餐' as sclx from (
select xh,sum(zcxfje)as zczje,
sum(wcxfje)as wczje,sum(wacxfje)as waczje
from adm.edu_app_ykt_scxf
GROUP BY xh )as tab1
union all
select xh, waczje as sczje ,'晚餐' as sclx from (
select xh,sum(zcxfje)as zczje,
sum(wcxfje)as wczje,sum(wacxfje)as waczje
from adm.edu_app_ykt_scxf
GROUP BY xh )as tab1
)
select* from (select xh,row_number() over(partition by xh ORDER BY sczje desc ) as pm ,sczje,sclx
from tmp_table)as table1
where pm=1
先使用with 語句進行列轉換成行 並補充三餐類型,再進行窗口排名函數即可得出結果。
暫時只想到該辦法,有好的辦法歡迎留言討論。
