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

如何在PostgreSQL中为用户表生成全等级序列行

PostgreSQL生成用户等级序列行的解决方案

针对你的需求,不需要使用窗口函数,PostgreSQL的generate_series函数配合表连接就能轻松实现行展开,以下是两种实用方法:

方法一:隐式交叉连接(简洁写法)

假设你的原表名为user_levels,执行以下SQL即可得到目标结果:

SELECT 
    ul.user_id,
    generate_series(1, ul.current_level) AS current_level
FROM 
    user_levels ul
ORDER BY 
    ul.user_id, current_level;

原理说明

generate_series(1, ul.current_level)会为每个用户生成从1到其current_level的整数序列,原表的每一行会和这个序列的每个值进行关联,从而将单条记录展开为多行等级数据。

方法二:LATERAL连接(更清晰的逻辑表达)

如果需要更明确的关联逻辑,也可以使用LATERAL子查询:

SELECT 
    ul.user_id,
    lv.level AS current_level
FROM 
    user_levels ul
LATERAL (
    SELECT generate_series(1, ul.current_level) AS level
) lv
ORDER BY 
    ul.user_id, lv.level;

原理说明

LATERAL关键字允许子查询引用外部表(这里是user_levels)的列,子查询为每个用户单独生成对应的等级序列,再和原表行关联展开。

这两种方法都能精准生成你需要的结果,比如原表中user_id=3、current_level=4的记录,会被展开为4行,等级分别为1、2、3、4,完全匹配目标结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:46:04