Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 计算平均值时如何得到非零值的计数_Sql_Oracle - Fatal编程技术网

Sql 计算平均值时如何得到非零值的计数

Sql 计算平均值时如何得到非零值的计数,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

我有一个表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列的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语法的最终查询。