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版本中,没有内置的字符串连接聚合函数。一种自定义实现涉及使用textcat
函数创建自定义聚合函数:
<code class="language-sql">CREATE AGGREGATE textcat_all( basetype = text, sfunc = textcat, stype = text, initcond = '' );</code>
此外,可以创建一个自定义连接函数来处理特定需求,例如忽略空值或空字符串:
<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中文网其他相关文章!