试图对 postgres 中的一列求和,但试图首先限制结果?
Posted
技术标签:
【中文标题】试图对 postgres 中的一列求和,但试图首先限制结果?【英文标题】:trying to sum a column in postgres but trying to limit the results first? 【发布时间】:2021-07-03 00:55:28 【问题描述】:我试图在我的数据库中获取过去 5 年的数据,然后对结果求和。这是我一直在尝试的:
select SUM(cb.carbon) as totalCarbon
from company.carbon cb
where upper(ticker) = 'IBM.US'
order by year desc
limit 5
但我收到此错误:
Error occurred during SQL query execution
Reason:
SQL Error [42803]: ERROR: column "cb.year" must appear in the GROUP BY clause or be used in an aggregate function
Position: 102
当我按年份 desc 注释掉 order 时,查询有效,但我需要它从最近一年开始。当缺少按年份的订单时,限制似乎也没有任何作用。
有什么办法可以做到吗?
【问题讨论】:
【参考方案1】:将限制移动到子查询。子查询仅返回前 5 个元组。然后继续正常处理。
例子:
rip=# select * from r order by a desc ;
a
----
10
5
4
3
1
(5 rows)
rip=# with T as
(select * from r
order by a desc
limit 3)
select sum(a) from T;
sum
-----
19
(1 row)
所以这可能是您查询的答案:
WITH T as (
select carbon
from company.carbon cb
where upper(ticker) = 'IBM.US'
order by year desc
limit 5
)
select SUM(carbon) as totalcarbon from T
【讨论】:
感谢您的回答,我尝试运行它并收到此错误 - SQL 错误 [42601]: ERROR: syntax error at or near "as" Position: 1 如果有帮助,我正在使用 postgres 哦,再试一次。我认为问题在于属性的名称。错误出现在第二个而不是第一个。以上是关于试图对 postgres 中的一列求和,但试图首先限制结果?的主要内容,如果未能解决你的问题,请参考以下文章