SELECT count(*) as cc, sum(sd)/sum(case when sd>0 then 1 else 0 end ) as aa FROM tb WHERE id>xxxx 

解决方案 »

  1.   

    SELECT count(*) as cc, sum(sd)*1.0/sum(case when sd>0 then 1 else 0 end ) as aa FROM tb WHERE id>xxxx 
      

  2.   

    SELECT COUNT(*),SUM(sd)*1./(COUNT(*)-SUM(CASE WHEN sd=0 THEN 1 ELSE 0 END))
    FROM tb
      

  3.   

    select count(*)as cc,avg(sd)as aa  from tb group by cc,aa having id>xxxx and sd<>0
      

  4.   

    select count(1) as cc,sum(sd) / sum(case when sd>0 then 1 else 0 end) as aa from tb where id>0
    不过这样会比较慢
      

  5.   

    SELECT count(*) as cc, sum(sd)*1.0/sum(case when sd>0 then 1 else 0 end ) as aa FROM tb WHERE id>xxxx 
      

  6.   

    SELECT count(*) as cc, avg(nullif(sd,0)) as aa FROM tb WHERE id>xxxx 
      

  7.   

    直接用nullif(sd,0)把0转换成null就不会计入统计了
      

  8.   

    select
    (SELECT count(*) as cc FROM tb WHERE id>xxxx ),
    (SELECT avg(sd) as aa FROM tb WHERE id>xxxx AND sd>0 )
      

  9.   

    SELECT count(*) as cc, avg(case sd when 0 then 1 else sd end ) as aa FROM tb WHERE id>xxxx