什么是Listagg函数?

Listagg函数是Oracle数据库中用于字符串拼接的函数。它可以将多行数据中的某个字段的值按照指定的分隔符拼接为一个字符串,并将结果返回。

Listagg函数的语法

Listagg函数的语法如下:

1
LISTAGG(expression, delimiter) WITHIN GROUP (ORDER BY column)

其中:

  • expression:用于拼接的列或表达式。
  • delimiter:指定的分隔符,用于将拼接的字符串分隔开。
  • column:用于排序的列,可选参数。

Listagg函数的示例

假设我们有一个名为employees的表,包含以下数据:

ID NAME DEPARTMENT
1 Alice IT
2 Bob HR
3 Charlie IT
4 David Finance
5 Eve HR

现在,我们将演示一些常见的Listagg函数的用法。

示例1:无分组拼接

假设我们想将employees表中的所有员工名字按照逗号分隔拼接成一个字符串。

1
2
SELECT LISTAGG(NAME, ',') WITHIN GROUP (ORDER BY ID) AS NAMES
FROM employees;

输出结果:

1
2
3
NAMES
-----------------
Alice,Bob,Charlie,David,Eve

示例2:分组拼接

假设我们想将employees表中每个部门的员工名字按照逗号分隔拼接成一个字符串。

1
2
3
SELECT DEPARTMENT, LISTAGG(NAME, ',') WITHIN GROUP (ORDER BY ID) AS NAMES
FROM employees
GROUP BY DEPARTMENT;

输出结果:

1
2
3
4
5
DEPARTMENT | NAMES
-----------|-----------------
IT | Alice,Charlie
HR | Bob,Eve
Finance | David

示例3:指定排序顺序

假设我们想将employees表中所有员工名字按照部门和ID进行排序,并按照逗号分隔拼接成一个字符串。

1
2
SELECT LISTAGG(NAME, ',') WITHIN GROUP (ORDER BY DEPARTMENT, ID) AS NAMES
FROM employees;

输出结果:

1
2
3
NAMES
-----------------
Alice,Charlie,Bob,David,Eve