首頁 >資料庫 >mysql教程 >如何在 PostgreSQL'group by”查詢中連接字串?

如何在 PostgreSQL'group by”查詢中連接字串?

Susan Sarandon
Susan Sarandon原創
2025-01-22 08:41:09868瀏覽

How to Concatenate Strings within a PostgreSQL `group by` Query?

在PostgreSQL group by 查詢中連接字串欄位

處理PostgreSQL資料庫中的資料時,可能需要在group by查詢中連接特定欄位的字串。這可以透過多種方法實現,具體取決於PostgreSQL的版本。

PostgreSQL 9.0及更高版本

現代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.x

在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.3.x及更低版本

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn