postgresql多列合併成一列string_agg函式
阿新 • • 發佈:2019-01-07
1 有時候我們會需要將多條資料根據一些特別的欄位做一些合併。比如下面這個查詢,正常會查詢出3條資料,但是我們會希望根據create_by 分成兩列顯示
2 這時候需要用到string_agg函式,先通過group by分組,在進行合併,當然查詢結果需要滿足group by的限制;sql語句:
select create_by,string_agg(videoname,',') as videonames from w008_video_addr_info where id in (4248,538,546)
group by create_by
查詢結果:
3 複雜一些的應用場景(子查詢):
下面的語句是我用來查詢一個學生在什麼時間看了哪些視訊:
select sa.id, info.nickname, (select string_agg(v.videoname,',') from w008_school_assign_video sv join w008_video_addr_info v on sv.videoaddrinfo =v.id where sv.schoolassignment=sa.id and v.is_removed=0 and sv.is_removed=0 group by v.is_removed) as videos, (select string_agg(to_char(sv.create_date, 'MM-DD HH24:MI'),',') from w008_school_assign_video sv join w008_video_addr_info v on sv.videoaddrinfo =v.id where sv.schoolassignment=sa.id and v.is_removed=0 and sv.is_removed=0 group by v.is_removed) as viewtime from w008_school_assignment sa join w008_user_business_info info on sa.userlongid=info.id where sa.shchoolworkid=2514505674916356
結果:
當然,string_agg(field,'分隔符');分隔符可以填寫其他任意的字元,方便後期處理即可;