pgsql 列轉行操作記錄


 現有如下的數據 需要統計三餐消費中哪一餐消費最高,思路是先進行列轉行 再使用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 語句進行列轉換成行 並補充三餐類型,再進行窗口排名函數即可得出結果。

暫時只想到該辦法,有好的辦法歡迎留言討論。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM