📜  sql string_agg - SQL (1)

📅  最后修改于: 2023-12-03 15:20:15.784000             🧑  作者: Mango

SQL中的string_agg函数

在SQL查询中,我们经常需要将若干个结果按特定顺序进行拼接,并以某种分隔符分割。这时,可以使用SQL中的string_agg函数来实现这一需求。本文将介绍string_agg函数的用法和示例。

1. 函数说明

string_agg函数将某一列的结果进行聚合,并返回以指定分隔符分割的字符串。其基本格式为:

string_agg(expression, delimiter)

其中:

  • expression:需要聚合的列或表达式。
  • delimiter:分隔符。
2. 用法示例
2.1 拼接字符串

假设有一张student表,包含id、name、course三列。我们需要将每个学生所选的课程以逗号分隔的形式拼接成一个字符串,可以使用以下SQL语句:

SELECT name, string_agg(course, ',') AS courses
FROM student
GROUP BY name;

结果类似于:

| name | courses | | ------ | --------------------| | Alice | Math,English | | Bob | Math | | Charlie| English,Astronomy |

2.2 去重后拼接字符串

如果需要去除拼接字符串中的重复部分,可以将expression参数中的列用DISTINCT关键字包裹。例如:

SELECT name, string_agg(DISTINCT course, ',') AS courses
FROM student
GROUP BY name;
2.3 拼接多列

string_agg函数也可以拼接多列的结果。例如,如果我们需要将每个学生的id、name、course以逗号分隔的形式拼接成一个字符串,可以使用以下SQL语句:

SELECT string_agg(id||':'||name||':'||course, ',') AS students
FROM student;

结果类似于:

| students | | ------------------------------------------------------------ | | 1:Alice:Math,2:Bob:Biology,3:Charlie:English,4:Alice:English,5:Charlie:Astronomy,6:Bob:Math |

3. 返回代码片段

下面是第2.1节中的SQL语句的代码片段:

SELECT name, string_agg(course, ',') AS courses
FROM student
GROUP BY name;

希望本文的介绍可以帮助您更好地使用string_agg函数。