过滤分区SUM的行的最佳方法[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我有一个表,包括订单,订单上的商品,以及订购商品的数量。

我想要做的是为“订单数量”创建一个额外的列,它是按订单分组的项目数量的总和(参见下表的图表...订单B有30个总数量分为三行)

我可以使用sum和partition轻松完成此操作:

SUM(quantity) OVER (PARTITION BY order_id) order_qty

但是,我需要的是过滤到只有数量> 20的订单。当我尝试将该条件添加到WHERE或HAVING子句时,我收到此错误:

ORA-30483: window  functions are not allowed here

一种解决方案似乎是将整个SQL块包装在另一个SELECT FROM语句中,然后添加WHERE子句以按order_qty过滤。总的来说,这似乎是草率和非直观的...有没有更好的解决方案来过滤基于在更高级别划分的聚合值?

enter image description here

sql oracle select plsql oracle-sqldeveloper
1个回答
1
投票

用。。。来代替

SUM(quantity) OVER (PARTITION BY order_id order by 1) order_qty
© www.soinside.com 2019 - 2024. All rights reserved.