1. 程式人生 > >postgresql多列合併成一列string_agg函式

postgresql多列合併成一列string_agg函式

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,'分隔符');分隔符可以填寫其他任意的字元,方便後期處理即可;