亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PostgreSQL組_conat等效?

PostgreSQL組_conat等效?

明月笑刀無情 2019-06-25 14:27:24
PostgreSQL組_conat等效?我有一個表,我想把每個id中的一行連在一起。例如,在我的桌子上,我有:TM67 | 4  | 32556TM67 | 9  | 98200TM67 | 72 | 22300TM99 | 2  | 23009TM99 | 3  | 11200我想說的是:TM67 | 4,9,72 | 32556,98200,22300TM99 | 2,3    | 23009,11200在MySQL中,我能夠使用聚合函數。GROUP_CONCAT但這在這里似乎行不通.。是否有與PostgreSQL等效的方法,或另一種實現此功能的方法?
查看完整描述

3 回答

?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

這可能是一個很好的起點(8.4+版本):

SELECT id_field, array_agg(value_field1), array_agg(value_field2)FROM data_tableGROUP BY id_field

陣列AGG返回數組,但可以將其轉換為文本并根據需要進行編輯(請參閱下面的說明)。

在8.4版本之前,您必須在使用之前自己定義它:

CREATE AGGREGATE array_agg (anyelement)(
    sfunc = array_append,
    stype = anyarray,
    initcond = '{}');

(摘自PostgreSQL文檔)

澄清:

  • 將數組轉換為文本的結果是,結果字符串以大括號開頭和結尾。如果不想要的話,這些大括號需要用某種方法移除。
  • 將ANYARRAY轉換為Text,最好將CSV輸出模擬為包含嵌入逗號的元素,這些元素在標準CSV樣式的輸出中雙引號。任何數組_to_string()或string_agg()(在9.1中添加的“group_conat”函數)都不會引用帶有內嵌逗號的字符串,從而導致結果列表中的元素數不正確。
  • 新的9.1 String_agg()函數不首先將內部結果轉換為Text。因此,如果value_field是整數,“string_agg(Value_Field)”將產生錯誤。“string_agg(value_field:text)”將是必需的。Array_agg()方法只需要在聚合之后進行一次強制轉換(而不是按值進行強制轉換)。


查看完整回答
反對 回復 2019-06-25
?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊

自9.0以來這就更容易了:

SELECT id, 
       string_agg(some_column, ',')FROM the_tableGROUP BY id


查看完整回答
反對 回復 2019-06-25
?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

SELECT array_to_string(array(SELECT a FROM b),', ');

也一樣。


查看完整回答
反對 回復 2019-06-25
  • 3 回答
  • 0 關注
  • 593 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號