我有一个表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
感谢。
答案 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');