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

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

Susan Sarandon
發布: 2025-01-22 08:41:09
原創
895 人瀏覽過

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字段,可以使用以下查詢:

SELECT company_id, string_agg(employee, ', ')
FROM mytable
GROUP BY company_id;
登入後複製

PostgreSQL 8.4.x

在PostgreSQL 8.4中,可以使用array_agg(expression)聚合函數將值收集到陣列中。然後可以使用array_to_string()函數將陣列轉換為連接的字串:

SELECT company_id, array_to_string(array_agg(employee), ', ')
FROM mytable
GROUP BY company_id;
登入後複製

PostgreSQL 8.3.x及更低版本

在較舊的PostgreSQL版本中,沒有內建的字串連接聚合函數。一種自訂實作涉及使用textcat函數建立自訂聚合函數:

CREATE AGGREGATE textcat_all(
  basetype    = text,
  sfunc       = textcat,
  stype       = text,
  initcond    = ''
);
登入後複製

此外,可以建立一個自訂連接函數來處理特定需求,例如忽略空值或空字串:

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;
登入後複製

使用此函數,可以修改查詢如下:

SELECT company_id, commacat_ignore_nulls(employee)
FROM mytable
GROUP BY company_id;
登入後複製

以上是如何在 PostgreSQL'group by”查詢中連接字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板