如何在oracle中将trunc值与平均值进行比较

时间:2012-10-01 03:17:51

标签: oracle plsql average

我应该将截断值与平均值进行比较。在我的表中,我有2个日期,order_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:此处不允许使用群组功能

1 个答案:

答案 0 :(得分:3)

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

一种经典的方法是将avg放在一个返回标量的单独查询中:

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;