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中文网其他相关文章!