在PostgreSQL資料庫中,根據特定欄位分組並連接每個分組中另一個字串欄位的值,是常見需求。實作方法取決於PostgreSQL的版本。
PostgreSQL 9.0以上版本(自2010年起)提供string_agg(expression, delimiter)
函數來實現此目的。要連接名為EMPLOYEE
的字串欄位中的字串,可以使用以下查詢:
<code class="language-sql">SELECT company_id, string_agg(employee, ', ') FROM mytable GROUP BY company_id;</code>
您也可以在聚合表達式中指定ORDER BY
子句來控制連接值的順序。
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 8.4之前,沒有內建的聚合函數來連接字串。可以使用CREATE AGGREGATE
語句建立自訂聚合函數:
<code class="language-sql">CREATE AGGREGATE textcat_all( basetype = text, sfunc = textcat, stype = text, initcond = '' );</code>
這個基本的聚合函數只是簡單地連接群組中的所有字串。您也可以建立一個自訂函數,在連接的值之間新增分隔符,例如:
<code class="language-sql">CREATE FUNCTION commacat(acc text, instr text) RETURNS text AS $$ BEGIN IF acc IS NULL OR acc = '' THEN RETURN instr; ELSE RETURN acc || ', ' || instr; END IF; END; $$ LANGUAGE plpgsql;</code>
然後,您可以在GROUP BY
查詢中使用自訂聚合函數來連接字串:
<code class="language-sql">SELECT company_id, textcat_all(commacat(NULL, employee)) AS concatenated_employees FROM mytable GROUP BY company_id;</code>
以上是如何在 PostgreSQL 中連接分組欄位中的字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!