1

私はそれらによってその数を作成しようとしてaggregate functionconcatenatesますgrouping。どうすればそれについて行くことができますか?以下のようなテーブルがあるとしましょう。

Table Numbers
123
145
187
105

結果を次のようにしたい

105_123_145_187

MySQL で作業している場合、group_concat区切り記号の使用方法を知っています。_

PostgreSQL でそれを行うにはどうすればよいですか?

4

3 に答える 3

3

すでにそのような機能があります:

SELECT string_agg(num::text,'_')
FROM Numbers;

詳細はこちら:string_agg

postgresql8.4以前のバージョンを使用している場合は教えてください。この関数をカスタムアグリゲートとして実装する方法を紹介します。

UPDカスタムアグリゲート:

CREATE OR REPLACE FUNCTION public.concat_delimited (text, text, text)
RETURNS text AS
$body$
  SELECT $1 || (CASE WHEN $1 = '' THEN '' ELSE $3 END) || $2;
$body$
LANGUAGE 'sql'
IMMUTABLE
RETURNS NULL ON NULL INPUT;

CREATE AGGREGATE public.text_concat (text, text)
(
  SFUNC = public.concat_delimited,
  STYPE = text
);
于 2012-12-13T13:42:42.147 に答える
1

最新のPostgreSQLでは。を使用しますstring_agg(columnname,'_')

古いバージョン8.4以降の場合は、string_to_array(array_agg(columname), '_')

配列関数と演算子のドキュメントを参照してください。

例:

regress=> SELECT array_to_string(array_agg(x::text), ', ') FROM generate_series(1,10) x;
        array_to_string
-------------------------------
 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
(1 row)

質問には常にPostgreSQLのバージョンを含めてください。

于 2012-12-14T00:45:45.407 に答える
-3

concat_ws(sep text, str "any" [, str "any" [, ...] ])あなたが探している機能です。

最初のパラメーターはセパレーターで、NULL 引数は無視されます。詳細については、PostgreSQL のマニュアルを参照してください。

私は pgSQL にまったく精通していませんが、集計関数を作成するための答えはそこにあります。関数の作成方法については、pgSQL のマニュアルを参照してください。

于 2012-12-13T13:30:55.707 に答える