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

如何用PostgreSQL按组内最大值重复组内行

解决方案(PostgreSQL)

要实现这个需求,我们可以通过计算分组最大rank + 关联numbers表生成重复行的方式完成,具体SQL如下:

-- 先计算每个question_id组内的最大option_rank
WITH question_max_rank AS (
    SELECT 
        question_id,
        MAX(option_rank) AS max_rank
    FROM 
        your_table_name  -- 替换成你实际的问题表名称
    GROUP BY 
        question_id
)
-- 关联原表、分组最大rank表和numbers表生成结果
SELECT 
    q.question_id,
    q.option_rank,
    n.id AS position
FROM 
    your_table_name q
JOIN 
    question_max_rank mr ON q.question_id = mr.question_id
JOIN 
    numbers n ON n.id <= mr.max_rank
ORDER BY 
    q.question_id, q.option_rank, n.id;

逻辑说明:

  • CTE question_max_rank:通过分组聚合,得到每个question_id对应的最大option_rank(也就是需要重复的次数n)。
  • 关联原表与CTE:让每一行数据都能拿到所属分组的n值。
  • 关联numbers表:利用numbers.id <= mr.max_rank的条件,让每个原表行生成n条重复记录,同时用numbers.id作为新增的position列。
  • 排序:按question_id、option_rank、position排序,保证输出顺序和期望一致。

注意:请把SQL中的your_table_name替换成你实际存储问题数据的表名。如果你的numbers表的id范围(1-1000)足够覆盖所有分组的最大option_rank,这个方案就能完美满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:21:37