Postgresql GROUP_CONCAT等價?我有一個表,我想每個id拉一行,并且字段值連接在一起。例如,在我的表中,我有這個:TM67 | 4 | 32556TM67 | 9 | 98200TM67 | 72 | 22300TM99 | 2 | 23009TM99 | 3 | 11200我想輸出:TM67 | 4,9,72 | 32556,98200,22300TM99 | 2,3 | 23009,11200在MySQL中,我能夠使用聚合函數(shù)GROUP_CONCAT,但這似乎在這里不起作用...是否有等效的PostgreSQL,或其他方法來實現(xiàn)這一點?
3 回答

慕村9548890
TA貢獻1884條經驗 獲得超4個贊
這可能是一個很好的起點(僅限8.4+版本):
SELECT id_field, array_agg(value_field1), array_agg(value_field2)FROM data_tableGROUP BY id_field
array_agg返回一個數(shù)組,但您可以根據需要對其進行CAST編輯和編輯(請參閱下面的說明)。
在8.4版之前,您必須在使用之前自行定義:
CREATE AGGREGATE array_agg (anyelement)( sfunc = array_append, stype = anyarray, initcond = '{}');
(從PostgreSQL文檔中解釋)
澄清:
將數(shù)組轉換為文本的結果是生成的字符串以花括號開頭和結尾。如果不需要,那些支撐需要通過某種方法去除。
將ANYARRAY轉換為TEXT最能模擬CSV輸出,因為包含嵌入逗號的元素在標準CSV樣式的輸出中是雙引號。array_to_string()或string_agg()(9.1中添加的“group_concat”函數(shù))都不引用帶有逗號的字符串,導致結果列表中的元素數(shù)量不正確。
新的9.1 string_agg()函數(shù)不會首先將內部結果強制轉換為TEXT。因此,如果value_field是整數(shù),則“string_agg(value_field)”將生成錯誤?!皊tring_agg(value_field :: text)”將是必需的。array_agg()方法在聚合后只需要一次強制轉換(而不是每個值的強制轉換)。
添加回答
舉報
0/150
提交
取消