如何使用中值作为分析函数(oracle SQL)

时间:2014-05-28 06:44:37

标签: sql oracle median

你能解释为什么以下有效:

select recdate,avg(logtime) 
over 
(ORDER BY recdate rows between 10 preceding and 0 following) as logtime 
from v_download_times;

以下不是

select recdate,median(logtime)
over 
(ORDER BY recdate rows between 10 preceding and 0 following) as logtime
 from v_download_times;

(中位数而不是平均值)

我收到 ORA-30487 错误。

我将很感激解决方法。

3 个答案:

答案 0 :(得分:2)

错误消息为ORA-30487: ORDER BY not allowed here。当然,如果我们咨询documentation for the MEDIAN function它说:

  

“您可以使用MEDIAN作为分析函数。您只能指定   query_partition_clause在其OVER子句中。“

答案 1 :(得分:1)

但是,如果您只想从当前行之前的一定数量的行中提取它,那不是多余的。 一种解决方法可能是仅出于中位数目的限制您的数据集,例如

select 
median(field) over (partition by field2) 
from ( select * from dataset 
        where period_back between 0 and 2 )

答案 2 :(得分:0)

MEDIAN不允许使用ORDER BY子句。正如APC在答案中指出的那样,documentation告诉我们,我们只能指定query_partition_clause。

ORDER BY是多余的,因为我们正在寻找中心值 - 无论顺序如何都是一样的。