表: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第乙個引數...