group by
クエリPostgreSQL データベース内のデータを処理する場合、group by
クエリ内の特定のフィールドの文字列を連結する必要がある場合があります。これは、PostgreSQL のバージョンに応じてさまざまな方法で実現できます。
最新の PostgreSQL バージョン (2010 年以降にリリース) は string_agg(expression, delimiter)
関数を提供します。この関数を使用すると、group by
クエリ内の文字列を指定された区切り文字で区切って連結できます。
たとえば、各 COMPANY_ID
グループの EMPLOYEE
フィールドを結合するには、次のクエリを使用できます:
<code class="language-sql">SELECT company_id, string_agg(employee, ', ') FROM mytable GROUP BY company_id;</code>
PostgreSQL 8.4 では、array_agg(expression)
集計関数を使用して値を配列に収集できます。次に、array_to_string()
関数を使用して配列を連結文字列に変換できます。
<code class="language-sql">SELECT company_id, array_to_string(array_agg(employee), ', ') FROM mytable GROUP BY company_id;</code>
古い PostgreSQL バージョンには、文字列連結のための組み込み集計関数がありません。カスタム実装の 1 つは、textcat
関数を使用したカスタム集計関数の作成です。
<code class="language-sql">CREATE AGGREGATE textcat_all( basetype = text, sfunc = textcat, stype = text, initcond = '' );</code>
さらに、null 値や空の文字列を無視するなど、特定のニーズに対応するカスタム接続関数を作成できます。
<code class="language-sql">CREATE FUNCTION commacat_ignore_nulls(acc text, instr text) RETURNS text AS $$ BEGIN IF acc IS NULL OR acc = '' THEN RETURN instr; ELSIF instr IS NULL OR instr = '' THEN RETURN acc; ELSE RETURN acc || ', ' || instr; END IF; END; $$ LANGUAGE plpgsql;</code>
この関数を使用すると、クエリを次のように変更できます:
<code class="language-sql">SELECT company_id, commacat_ignore_nulls(employee) FROM mytable GROUP BY company_id;</code>
以上がPostgreSQL の「group by」クエリ内で文字列を連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。