首頁 > 資料庫 > mysql教程 > Oracle有相當於MySQL的「group_concat」的功能嗎?

Oracle有相當於MySQL的「group_concat」的功能嗎?

Barbara Streisand
發布: 2025-01-15 12:36:45
原創
860 人瀏覽過

Does Oracle Have a Function Equivalent to MySQL's `group_concat`?

Oracle 和 MySQL 字串聚合:尋找與 group_concat

等價的內容

資料庫任務通常需要將多行資料組合成一個字串。 MySQL 的 group_concat 函式簡化了這個過程。 但是 Oracle 是如何實現同樣的結果的呢?

Oracle 的解決方案

Oracle 提供了多種方法來複製 MySQL 的 group_concat 功能:

對於 Oracle 11g 及更高版本,LISTAGG 函數提供直接等效項:

<code class="language-sql">SELECT col1, LISTAGG(col2, ', ') WITHIN GROUP (ORDER BY col2) AS "names"
FROM table_x
GROUP BY col1</code>
登入後複製

這會整齊地聚合每個 col2 群組的 col1 值,並用「,」分隔它們。 ORDER BY 子句確保字串排序一致。

較舊的 Oracle 版本(10g 及以下)需要自訂函數。 這是一個例子:

<code class="language-sql">CREATE OR REPLACE FUNCTION get_comma_separated_value (input_val NUMBER)
RETURN VARCHAR2
IS
  return_text VARCHAR2(10000) := NULL;
BEGIN
  FOR x IN (SELECT col2 FROM table_name WHERE col1 = input_val) LOOP
    return_text := return_text || ',' || x.col2 ;
  END LOOP;
  RETURN LTRIM(return_text, ',');
END;
/</code>
登入後複製

此函數迭代行,將值附加到 return_textLTRIM 函數刪除前導逗號。 用法:

<code class="language-sql">SELECT col1, get_comma_separated_value(col1) FROM table_name</code>
登入後複製

請注意,WM_CONCAT 存在於某些較舊的 Oracle 版本中,但現在不受支援。

MySQL 的 group_concat 進行比較

為了清楚起見,這裡是 MySQL group_concat 文法:

<code class="language-sql">SELECT col1, GROUP_CONCAT(col2) FROM table_name GROUP BY col1</code>
登入後複製

這簡潔地聚合了每個 col2 群組的 col1 值。 雖然它缺乏 LISTAGG 的明確排序功能,但它具有類似的目的。

以上是Oracle有相當於MySQL的「group_concat」的功能嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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