Sql AVG函数返回错误结果

Sql AVG函数返回错误结果,sql,oracle,function,Sql,Oracle,Function,我试图从数据集中的一列中获得平均值。但是,当我在excel上测试它时,sql结果返回了错误的结果 表结构如下所示: ticker_symb day_sum_eff_dt cusip clos_prc n_clos_prc DIFF AVRG ASLR 05/17 13799F229 0.234 0.234 0 0 这是我目前的代码: SELECT ticker_symb, day_sum_eff_

我试图从数据集中的一列中获得平均值。但是,当我在excel上测试它时,sql结果返回了错误的结果

表结构如下所示:

 ticker_symb   day_sum_eff_dt  cusip     clos_prc  n_clos_prc  DIFF   AVRG
 ASLR           05/17        13799F229     0.234    0.234        0     0
这是我目前的代码:

SELECT 
ticker_symb, day_sum_eff_dt, cusip, 
clos_prc, 
n_clos_prc,
      case
       when  clos_prc is null and n_clos_prc is not null 
       then (n_clos_prc - LAG( n_clos_prc ignore nulls) OVER (ORDER BY cusip)) 
       else NULL
       end DIFF,
AVG(DIFF) OVER(PARTITION BY cusip ) AS avrg
FROM (SELECT  
day_sum_eff_dt, cusip,
ticker_symb_cd, 
clos_prc, 
navgen_clos_prc
  case
       when  clos_prc is null and n_clos_prc is not null 
       then (n_clos_prc - LAG( n_clos_prc ignore nulls) OVER (ORDER BY cusip)) 
       else NULL
       end DIFF
        from DAILY_SUMMARY
where
day_sum_eff_dt > sysdate-60
and  (cusip in ( '13799F229'))
order by  cusip, day_sum_eff_dt;
DIFF列给出的平均结果为-0.00057993076923076

但实际平均值为-0.0002949250000。这并不是说你得到的结果是相同的,而是说明了结果的不同程度


代码可能有什么问题?

子查询中select的结果是什么?子查询中DIFF大小写的结果是正确的。我已经在一个较小的样本上进行了检查,并且在子问题上进行了数学运算。您必须提供更多信息。数据可能会有帮助。你们有零价格吗?(如果是,为什么?)?(提示:在计算平均值时,它可能将它们视为零;Oracle只是忽略它们)。然后:如果当前值之前没有非NULL值,则LAG(…忽略NULL)仍将生成NULL。那么:如果a或b为空,则a-b为空;因此,平均值(a-b)不一定与平均值(a)-平均值(b)相同。(!!!!!!!!!)如果您提供单个cusip的信息,以及可能包含15个日期和价格的序列,如果您的数据允许空价格,则最好提供一些空价格。您的查询似乎已中断。您正在从不包含这些列的派生表中选择
ticker\u symb
n\u clos\u prc
。派生表也没有右括号。因此,除了语法错误之外,这个查询不可能给出任何结果。