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

PostgreSQL如何先取最近5年数据再对指定列求和

错误原因

你当前的SQL写法存在两个逻辑问题:

  1. 使用SUM聚合函数后,查询默认会把所有符合WHERE条件的行合并为1行结果,此时直接用ORDER BY year会触发分组聚合规则报错:非聚合、非分组的字段不能直接在聚合查询的ORDER BY/SELECT中引用。
  2. 外层聚合后只剩1行结果,LIMIT 5完全不会生效,不可能实现取最近5年数据再求和的需求。

解决方案

先通过子查询筛选出最近5年的目标数据,再在外层做求和运算即可:

SELECT SUM(carbon) AS totalCarbon
FROM (
    -- 内层先取最近5年的原始数据
    SELECT cb.carbon
    FROM company.carbon cb
    WHERE UPPER(ticker) = 'IBM.US'
    ORDER BY year DESC
    LIMIT 5
) AS recent_5_year_records

注意事项

如果同一个ticker、同一年存在多条数据,需要先在内层按年份做分组聚合,避免重复统计:

SELECT SUM(annual_carbon) AS totalCarbon
FROM (
    -- 内层先按年聚合得到每年的总和,再取最近5年
    SELECT SUM(cb.carbon) AS annual_carbon
    FROM company.carbon cb
    WHERE UPPER(ticker) = 'IBM.US'
    GROUP BY year
    ORDER BY year DESC
    LIMIT 5
) AS recent_5_year_annual_data

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 02:15:03