试图对 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 中的一列求和,但试图首先限制结果?的主要内容,如果未能解决你的问题,请参考以下文章

对数据框中的一列求和并将结果返回为 int

SQL Server:按分组列求和并按另一列排序

试图在 CSS 中将内容放在左侧的一列居中 [重复]

如何为数据库中的一列生成唯一的字符串?

试图使用rbind时出现数字错误。

仅对过滤/可见数据求和 VBA