You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按出现顺序拼接唯一值?SQL查询实现求助

按出现顺序拼接唯一值的SQL实现

需求说明

需要将表中目标列的唯一值按首次出现的顺序拼接成字符串,即去除重复值后,保留原始出现顺序并拼接为单个字符串。

不同数据库的实现方案

1. MySQL(8.0+版本)

利用窗口函数标记首次出现的记录,再通过分组拼接得到结果:

WITH ranked_data AS (
    SELECT 
        target_column,
        ROW_NUMBER() OVER (PARTITION BY target_column ORDER BY sort_column) AS rn
    FROM your_table
)
SELECT GROUP_CONCAT(target_column ORDER BY MIN(sort_column) SEPARATOR ',') AS concatenated_unique_values
FROM ranked_data
WHERE rn = 1;

注:sort_column为表中能确定记录顺序的列(如自增ID、时间戳),your_table替换为实际表名,target_column替换为需要处理的列名

2. PostgreSQL

通过DISTINCT ON筛选首次出现的记录,再用字符串聚合函数拼接:

SELECT STRING_AGG(target_column, ',' ORDER BY sort_column) AS concatenated_unique_values
FROM (
    SELECT DISTINCT ON (target_column) target_column, sort_column
    FROM your_table
    ORDER BY target_column, sort_column
) AS first_occurrences;

3. SQL Server(2017+版本)

用窗口函数筛选首次出现的记录,再进行字符串聚合:

WITH ranked_data AS (
    SELECT 
        target_column,
        ROW_NUMBER() OVER (PARTITION BY target_column ORDER BY sort_column) AS rn,
        sort_column
    FROM your_table
)
SELECT STRING_AGG(target_column, ',' ORDER BY MIN(sort_column)) AS concatenated_unique_values
FROM ranked_data
WHERE rn = 1;

关键注意点

  • 必须依赖一个能确定记录顺序的列(如自增ID、创建时间),否则无法保证"按出现顺序"的准确性
  • 不同数据库的字符串拼接函数存在差异:MySQL使用GROUP_CONCAT,PostgreSQL和SQL Server使用STRING_AGG

内容的提问来源于stack exchange,提问作者Dimple

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:45:35