pgsql字符串拼接STRING_AGG
时间: 2025-05-12 19:38:58 浏览: 32
### PostgreSQL STRING_AGG 字符串拼接 使用方法
`STRING_AGG()` 是 PostgreSQL 提供的一种聚合函数,能够将某一列中的多个值按照指定的分隔符连接成一个单一的字符串[^2]。其基本语法如下:
```sql
string_agg(expression, delimiter)
```
- `expression`: 被聚合的表达式或列名。
- `delimiter`: 连接各值时使用的分隔符。
#### 示例 1:基础用法
假设有一张名为 `employees` 的表,结构如下:
| id | name | department |
|----|---------|------------|
| 1 | Alice | HR |
| 2 | Bob | IT |
| 3 | Charlie | IT |
如果希望按部门汇总员工姓名并以逗号分隔,可以执行以下 SQL 查询语句:
```sql
SELECT department, string_agg(name, ', ') AS employee_list
FROM employees
GROUP BY department;
```
结果将是:
| department | employee_list |
|-----------|-------------------|
| HR | Alice |
| IT | Bob, Charlie |
此查询通过 `string_agg` 将同一部门下的名字连接起来,并使用 `,` 和空格作为分隔符[^5]。
#### 示例 2:自定义分隔符
除了常见的逗号外,还可以设置其他字符作为分隔符。例如,使用竖线 (`|`) 来代替默认的逗号加空格:
```sql
SELECT department, string_agg(name, ' | ') AS employee_list
FROM employees
GROUP BY department;
```
此时的结果会变为:
| department | employee_list |
|-----------|--------------------|
| HR | Alice |
| IT | Bob | Charlie |
这种灵活性允许开发者根据实际需求调整输出格式[^3]。
#### 示例 3:处理 NULL 值
当某些记录可能包含 `NULL` 值时,可以通过额外操作忽略这些值。比如,在上述例子中加入一条新数据 `(4, NULL, 'HR')` 后运行相同查询不会受到影响,因为 `STRING_AGG` 默认跳过 `NULL` 值。
---
### JOOQ 集成示例
对于那些利用 Java 库 JOOQ 构建数据库交互的应用程序来说,也可以轻松调用 `STRING_AGG` 功能。下面是一个简单的 JOOQ 实现片段:
```java
import static org.jooq.impl.DSL.*;
DSLContext create = DSL.using(connection);
Result<Record> result = create.select(
table("province").field("province"),
field(stringAgg(table("city").field("city"), ",")).as("total_city"))
.from("city")
.groupBy(field("province"))
.fetch();
```
这里展示了如何在复杂的多表联合查询场景下应用该功能。
---
阅读全文
相关推荐


















