postgresql 聚集函式加分組

2021-07-09 19:30:28 字數 2421 閱讀 5576

表:id name

---------------

1 a2 b

1 bselect id, group_concat(name) from *** group by id

得出的結果為

id group_concat(name)

---------------------------

1 a,b

2 bpostgresql沒有現成的group_concat聚集函式,但可以自定義聚集函式,所以可以容易的實現這功能。

自定義聚集函式 group_concat

引數anyelement匹配任何型別,聚集後返回陣列型別anyarray,該函式的功能是將每行的記錄附加到陣列裡。

select id, group_concat(name) from *** group by id

得出的結果為

id array_accum(name)

---------------------------

1 2

array_accum(name)為陣列型別,再用array_to_string函式將陣列轉換為字串

select id, array_to_string(group_concat(name),',') from *** group by id

就可以得到group_concat相同的結果了。

但mysql的group_concat的功能很強,比如可以排序等,postgresql若要模擬它,只能自己定義乙個增強型的函式比如array_to_string_plus,可以對陣列進行排序後再concat,這裡就不用多述,留給各位動腦筋吧。

1、例子

select * from t2 where id in (1,2,3,100,1000,0);

select * from t2 where id = any (''::integer);//用的這個

select * from t2 where id = any (values (1),(2),(3),(100),(1000),(0));

select t2.* from t2 join (values (1),(2),(3),(100),(1000),(0)) as t(id) on t2.id=t.id;

2、例子2  儲存過程

create or replace function 儲存過程(

in in_no text,

in in_type text)

returns table(v_block_id integer, v_block_type integer, v_center_point integer, v_gird_center_point integer, v_direction integer, v_x integer, v_y integer, v_lat numeric, v_lon numeric, v_grid_points text, v_points text) as

$body$

begin

return query

select b.id, 

b.block_type_id, 

b.center,

b.gridcenter, 

b.dirction,

cg.x_count,

cg.y_count,

cp.x,

cp.y,

array_to_string(platform.array_accum(g.x_count || ',' || g.y_count),';'),   //postgresql資料聚集函式array_accum

array_to_string(platform.array_accum(p.x || ',' || p.y),';')

from 表8 b 

inner join 表9 s 

on b.station_id = s.sid

inner join  表1 bp 

on b.id = bp.block_id

left outer join 表2  cg 

on b.gridcenter = cg.id

left outer join 表3  cp 

on b.center = cp.id

left outer join 表4  g 

on bp.girdpoint_id = g.id

left outer join 表5 p 

on bp.point_id = p.id

where s.no = cast(in_no as integer)

and b.block_type_id = any (('')::integer)    //這部分

group by b.id,cg.x_count,cg.y_count,cp.x,cp.y;

end$body$

language plpgsql volatile;

postgreSQL常用函式

select coalesce sum duration 0 若sum duration 返回值為空,則為其賦值0 select to date 2013 12 20 yyyy mm dd 字串轉化為date型別 select date 2013 10 28 01 00 interval 50 mi...

postgresql 內建函式

一 算術函式 數值計算 1,2,abs 絕對值 abs 數值 3,mod 求餘 mod 被除數,除數 4,round 四捨五入 round 物件數值,保留小數的位數 二 字串函式 字串操作 1,拼接 select str1,str2 str1 str2 as str concat from 表名 2...

postgresql常用函式

create table search.t test 20200108 c id varchar 300 c field varchar 300 insert into search.t test 20200108 values 1 醫療器械類,化妝品類,藥品類,食品類 concat ws第乙個引數...