如何在Oracle中比较截断值和平均值

3

我需要比较一个被截断的值和一个平均值。在我的表中,有两个日期,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: 不允许在此处使用分组函数

1个回答

3

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

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

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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接