聚合级别已关闭(Postgresql)

Posted

技术标签:

【中文标题】聚合级别已关闭(Postgresql)【英文标题】:Aggregation level is off (Postgresql) 【发布时间】:2021-07-04 18:07:59 【问题描述】:

我有 2 位客户及其订单的订单数据。我正在尝试计算每个客户的价格总和,仅针对产品 N 的特定订单

表:

这是我的查询:

select Customer_ID, Order_ID, Sales_Date,
sum(Price) over (partition by Customer_ID, Order_ID order by Customer_ID, Order_ID)
from orders
group by 1,2,3, Price
order by;

由于某种原因,我不明白它为每个同一客户提供了几行。我试图让每个客户只生成一行并订购产品 N

这是我当前的输出:

期望的结果:

【问题讨论】:

【参考方案1】:

为什么要使用窗口函数?我想你只是想要聚合:

select Customer_ID, Order_ID, Sales_Date,
       sum(Price)
from orders
group by 1,2,3;

如果您只想要一种产品,请添加where product = 'N'

【讨论】:

我看到我试图让事情变得比他们更复杂。如果我想为每个产品生成一个价格列 - 您是否建议以与上述相同的方式为每个产品编写一个单独的 CTE 并在最终的选择语句中组合?还是有更有效的方法? @sweti 。 . .如果您想为每种产品单独定价,您将使用条件聚合。如果那是你想要的,我建议你问一个新问题。

以上是关于聚合级别已关闭(Postgresql)的主要内容,如果未能解决你的问题,请参考以下文章

Postgres:一次选择获取最小值,最大值,聚合值

PostgreSQL服务器启动及关闭方法

不支持 postgresql 事务隔离级别 4

PostgreSQL的隐藏特性[关闭]

将 mysql 迁移到 PostgreSQL [关闭]

如何从应用程序级别设置 postgres 查询执行超时?