Postgresql GROUP_CONCAT相当?
-
23-09-2019 - |
質問
い表ていただきたいと思いますように引きつり行idフィールドの値を連結.
私のテーブルは、例えば、私はこの:
TM67 | 4 | 32556
TM67 | 9 | 98200
TM67 | 72 | 22300
TM99 | 2 | 23009
TM99 | 3 | 11200
ていただきたいと思いますように出力:
TM67 | 4,9,72 | 32556,98200,22300
TM99 | 2,3 | 23009,11200
MySQLでは私が使えるようになったとき集計機能 GROUP_CONCAT
, そのように見えませんの仕事はこちら---があるのと同等のためのPostgreSQL、別の言い方を達成。
解決
ここから始点(バージョン8.4+のみ):
SELECT id_field, array_agg(value_field1), array_agg(value_field2)
FROM data_table
GROUP BY id_field
array_agg 配列を返しますが、できるキャストがテキストの編集必要に応じて参照明示、。
以前のバージョン8.4定義するので自分でご使用の前に:
CREATE AGGREGATE array_agg (anyelement)
(
sfunc = array_append,
stype = anyarray,
initcond = '{}'
);
(言い換えからはPostgreSQLのドキュメント)
説明:
- の鋳造配列をテキストは当然のことですが、そのような文字列の開始と終了巻きブレース.そのブレースが必要で除去することにより、なんらかの方法でていない場合、望まれる。
- 鋳造ANYARRAYテキストのベストミCSV出力としての要素を含む組み込みカンマは二重引用された出力を標準CSVます。もarray_to_string()またはstring_agg()のgroup_concat"機能が追加され9.1)引用文字列の埋め込みカンマは、間違った要素数の一覧です。
- 新9.1string_agg()関数なキャストの内部に結果をテキストです。なので"string_agg(value_field)"というエラーを発生させる場合value_fieldは整数とします。"string_agg(value_field::テキスト)"が必要になります。のarray_agg()メソッドが一つだけキャスト後の集計にはキャストた値)となります。
他のヒント
このの9.0があるので、さらに簡単ます:
SELECT id,
string_agg(some_column, ',')
FROM the_table
GROUP BY id
SELECT array_to_string(array(SELECT a FROM b),', ');
としてうまくやってます。
このようにしてください
select field1, array_to_string(array_agg(field2), ',')
from table1
group by field1;
との配列型の作業へのバージョンの
select
array_to_string(
array(select distinct unnest(zip_codes) from table),
', '
);
postgresqlので
私の提案
SELECT cpf || ';' || nome || ';' || telefone
FROM (
SELECT cpf
,nome
,STRING_AGG(CONCAT_WS( ';' , DDD_1, TELEFONE_1),';') AS telefone
FROM (
SELECT DISTINCT *
FROM temp_bd
ORDER BY cpf DESC ) AS y
GROUP BY 1,2 ) AS x
所属していません StackOverflow