1
我有一个表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
我试图获得平均(忽略“0”值) (JET)列的每个工作的具体月份。此外,我需要计算我用于平均计算的非零值。 例如:
对于July
月份的工作A1
,JET列的平均值将为(9+3)/2 = 6
,并且用于计算此平均值的非零值的计数为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
sum(CASE nvl(job_execution_time, 0) !=0 THEN 1 ELSE 0 END) AS "Count_NonZeros"
感谢。
你的总和应该工作,但是我觉得语法缺少一个WHEN:SUM(CASE WHEN NVL(job_execution_time,0)= 0,则1 ELSE 0 END ) –
感谢您指出缺少'何时'。我添加了它,但它只给出了它在网格中显示的第一个作业的正确计数。其他后续作业的计数值不正确。 – bluerose
如果可能,请在您的问题中用'sum'语法添加您的最终查询。 –