postgresql如何實現group_concat功能


MySQL有個聚集函數group_concat, 它可以按group的id,將字段串聯起來,如

表:
id name
---------------
1 A
2 B
1 B

SELECT id, group_concat(name) from xxx group by id
得出的結果為

id group_concat(name)
---------------------------
1 A,B
2 B

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

自定義聚集函數 group_concat

CREATE AGGREGATE group_concat(anyelement)
(
sfunc = array_append, -- 每行的操作函數,將本行append到數組里
stype = anyarray, -- 聚集后返回數組類型
initcond = '{}' -- 初始化空數組
);

參數anyelement匹配任何類型,聚集后返回數組類型anyarray,該函數的功能是將每行的記錄附加到數組里。

SELECT id, group_concat(name) from xxx group by id
得出的結果為

id array_accum(name)
---------------------------
1 {'A','B'}
2 {'B'}

array_accum(name)為數組類型,再用array_to_string函數將數組轉換為字符串

SELECT id, array_to_string(group_concat(name),',') from xxx group by id
就可以得到group_concat相同的結果了。

但MySQL的group_concat的功能很強,比如可以排序等,postgresql若要模擬它,只能自己定義一個增強型的函數比如array_to_string_plus,可以對數組進行排序后再concat,這里就不用多述,留給各位動腦筋吧。


免責聲明!

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



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