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

PostgreSQL中如何按指定行号计算数据小计?

首先,你原来的SQL语句只会返回一个单独的小计值,没法关联到id=3的那条记录,所以得不到你想要的结果。这里有两种更简洁的实现方式:

方法一:使用窗口函数(推荐)

窗口函数可以直接计算累计总和,同时保留当前行的信息,写法最简洁:

SELECT 
    id,
    SUM(score) OVER (ORDER BY id) AS subtotal,
    name
FROM main
WHERE id = 3;

SUM(score) OVER (ORDER BY id)会自动计算从id最小的行到当前行的score累计值,当筛选id=3时,正好得到所有id<=3的score总和60,同时返回该行的id和name,完全匹配你的期望结果。

方法二:子查询关联

先通过子查询算出id<=3的score小计,再和原表关联取出目标行:

SELECT 
    m.id,
    s.subtotal,
    m.name
FROM main m
JOIN (SELECT SUM(score) AS subtotal FROM main WHERE id <= 3) s
WHERE m.id = 3;

这种方式逻辑直观,适合对窗口函数不太熟悉的场景。

如果需要替换成动态变量(比如把3换成其他值),不同数据库的变量语法略有差异,比如MySQL可以用SET @target_id = 3;,然后在查询中替换3为@target_id即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 16:30:43