3

我应该将截断值与平均值进行比较。在我的表中,我有 2 个日期,order_date 和 ship_date;我使用 trunc(ship_date - order_date) 来获取物品运送所需的天数。现在我想将这段时间的平均值与我从trunc()函数中获得的值进行比较,如果trunc()函数更大,那么我只想显示结果。

到目前为止,这是我想出的,任何帮助表示赞赏。

select order_id, 
    order_date, 
    trunc(ship_date-order_date) as shipping_time 
from product_order 
where (trunc(ship_date-order_date) > Avg(trunc(ship_date-order_date))); 

当我这样做时,我收到此错误:

ORA-00934: 此处不允许使用组功能

4

1 回答 1

3

这是一个基本问题。这不是trunc问题,而是经典的“将值与average整个表(或子集)上的值进行比较”。

一种经典的方法是在返回标量的单独查询中获取平均值:

select 
   order_id, 
   order_date, 
   trunc(ship_date-order_date) as shipping_time 
from product_order 
where 
  trunc(ship_date-order_date) > (select avg(trunc(ship_date-order_date)) 
                                 from product_order);

另一种方法是(使用分析函数):

select * 
from(
    select 
       order_id, 
       order_date, 
       trunc(ship_date-order_date) as shipping_time 
       avg(trunc(ship_date-order_date)) over() as avgshipping
    from product_order 
    )
where shipping_date > avgshipping;
于 2012-10-01T05:49:05.607 回答