Sql 计算平均值时如何得到非零值的计数
我有一个表mytable,其结构和数据如下Oracle 11gSql 计算平均值时如何得到非零值的计数,sql,oracle,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
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列的averageignoring“0”值。我还需要得到一个非零值的计数,我用它来计算平均值。
例如:
对于7月份的作业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')
如何获得用于计算每个平均值的非零值的计数?我尝试了以下计数,但不起作用
countnullifjob\u执行时间,0计数\u非零
sumCASE nvljob\u执行时间,0=0然后1,否则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');
您的总和应该可以工作,但我认为语法缺少WHEN:sumCASE WHEN nvljob_execution_time,0!=0然后1其他0结束感谢您指出缺少的“When”。我添加了它,但它只为它在网格中显示的第一个作业提供了正确的计数。其他后续作业的计数值不正确。如果可能,请在问题中添加带有sum语法的最终查询。