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_text
。 LTRIM
函數刪除前導逗號。 用法:
<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中文網其他相關文章!