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中文網其他相關文章!