当需要去重时,是否可以使用其他SQL函数配合STRING_AGG?
时间: 2024-11-23 10:50:22 浏览: 12
Sqlserver 2014 之 自定义字符串聚合函数
当需要在使用 `STRING_AGG` 合并字符串的同时去重时,确实可以结合其他SQL函数一起操作。一种常见的做法是在 `STRING_AGG` 之前先通过 `GROUP BY` 和 `DISTINCT` 来获取每个唯一的组合,然后再进行字符串连接。例如:
```sql
SELECT GROUP_CONCAT(DISTINCT name) AS unique_names
FROM my_table
GROUP BY other_column; -- 这里替换为你需要去重的条件
```
这里我们使用了 `GROUP_CONCAT` 函数,它与 `STRING_AGG` 类似,也是用于合并行级数据,但它默认就是去重的。如果想自定义分隔符,可以在函数名后面直接添加。
另一个选择是使用窗口函数,如 SQL Server 的 `ROW_NUMBER()`,但在某些版本中可能不太常见:
```sql
SELECT name, STRING_AGG(name, ', ' ORDER BY ROW_NUMBER() OVER(PARTITION BY other_column)) WITHIN GROUP (ORDER BY other_column)
FROM (
SELECT name, ROW_NUMBER() OVER(PARTITION BY other_column) as rn
FROM my_table
) subquery
WHERE rn = 1;
```
这里的 `rn = 1` 表示只取每个分区的第一个记录,即去重后的结果。
阅读全文