这个问题在这里已有答案:
我有一个表,包括订单,订单上的商品,以及订购商品的数量。
我想要做的是为“订单数量”创建一个额外的列,它是按订单分组的项目数量的总和(参见下表的图表...订单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过滤。总的来说,这似乎是草率和非直观的...有没有更好的解决方案来过滤基于在更高级别划分的聚合值?
用。。。来代替
SUM(quantity) OVER (PARTITION BY order_id order by 1) order_qty