如何在计算平均值时计算非零值

时间:2013-10-30 19:03:35

标签: sql oracle

我有一个表mytable,其中包含以下结构和数据(Oracle 11g)

Job_name    job_execution_time(JET in seconds)   Run_Date           records_processed
A1             0                                 7/1/2013           0
A1             0                                 7/5/2013           0
A1             3                                 7/12/2013          5
A1             9                                 7/22/2013          14
A1             0                                 8/1/2013           0
A1            15                                 8/16/2013          20 
A2             0                                 8/15/2013          0     
A2             0                                 8/17/2013          0
A2            10                                 9/15/2013          25
A2            45                                 9/17/2013          70   

我正在尝试获取该特定月份的每个作业的(JET)列的平均值(忽略“0”值)。此外,我需要计算我用于平均计算的非零值。 例如:
对于A1月的作业July,JET列的平均值为(9+3)/2 = 6,用于计算此平均值的非零值的计数为{{1} }。
我使用以下代码获得了平均值,但在计算时遇到了问题。

2

如何获取用于计算每个平均值的非零值的计数?我尝试了以下计数但不起作用。

  • select job_name , to_char(Run_Date, 'Month') Mon , nvl(avg(nullif(job_execution_time,0)), 0) Average_secs from mytable group by job_name, to_char(Run_Date, 'Month')
  • count(nullif(job_execution_time, 0)) count_nonzeros

感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用SUM和CASE语句

select job_name , to_char(Run_Date, 'Month') Mon ,
       nvl(avg(nullif(job_execution_time,0)), 0) Average_secs, 
       sum(case when job_execution_time !=0 then 1 else 0 end) counts
       from table1 group by job_name, to_char(Run_Date, 'Month');