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

如何按分组将每n行数据用string_agg()实现字符串聚合?

解决方法

核心思路是先给每个分组内的行分配连续序号,再根据序号将每n行划分为一个子组,最后对子组进行聚合。

实现代码(以n=3为例)

WITH numbered_data AS (
    SELECT 
        first_name,
        data_id,
        -- 按first_name分组,给每行分配序号(排序字段可根据实际需求调整)
        ROW_NUMBER() OVER (PARTITION BY first_name ORDER BY data_id) AS rn
    FROM #temp
),
grouped_data AS (
    SELECT 
        first_name,
        data_id,
        -- 计算子组编号:每3行一组,不足3行自动归为最后一组
        (rn - 1) / 3 AS group_num
    FROM numbered_data
)
SELECT 
    first_name,
    STRING_AGG(data_id, ',') AS data_id
FROM grouped_data
GROUP BY first_name, group_num
ORDER BY first_name, group_num;

代码说明

  1. numbered_data CTE:使用ROW_NUMBER()窗口函数,按first_name分组后给每行分配唯一序号,ORDER BY data_id可根据业务需求替换为其他排序字段(如插入时间)。
  2. grouped_data CTE:通过(rn - 1) / n计算子组编号,这里n=3,因此序号1-3会被归为同一子组,4-6归为下一个子组,以此类推,实现每n行聚合的效果。
  3. 最终查询:按first_name和子组编号group_num分组,用STRING_AGG()聚合data_id,得到目标结果。

调整分组行数

如果需要修改每组的行数(比如n=2),只需将(rn - 1) / 3中的3替换为对应的n值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:21:49