计数没有零的数字

时间:2013-04-17 07:39:35

标签: mysql sql

我的查询工作正常,但我想在哪里进行更改 查询会计算id_service = 89的所有备注 注释是0到3之间的数字而不是更多 我的查询计算所有这些笔记以获得平均值 一切正常。

我想要的改变是,他只计算1到3之间的音符(不是0) 我不知道怎么能这样做。

示例:

此查询计算在所有条件下我获得数字3的时间 这里是查询:

SELECT round( avg( AVG =3 ) * count( AVG ) ) AS New
     , sma_famille.famille
FROM (              
    SELECT ROUND( SUM( note ) / count( note ) ) AS AVG
         , sma_famille.famille
         , sma_agents.nom
    FROM sma_notes
        INNER JOIN sma_famille 
            ON sma_famille.id_service =89
        INNER JOIN sma_agents 
            ON sma_notes.id_agent = sma_agents.id_agent
        INNER JOIN sma_service_activite 
            ON sma_service_activite.id_activite = sma_notes.id_activite
            AND sma_service_activite.id_famille = sma_famille.id_famille
            AND sma_service_activite.id_service = sma_famille.id_service
    GROUP BY sma_famille.famille, sma_agents.nom
) AS FN
LEFT JOIN sma_famille 
    ON sma_famille.id_service =89
    AND FN.famille = sma_famille.famille
GROUP BY FN.famille

一个例子:
在Bio中我可以给每个人2个音符,如Bio Part1和Bio Part2。

在我的例子中,我有两个人 我在Bio Part1中给出两个注释“3”,在Bio Part2中我没有给出注释,所以有注释“0”!

这是我的查询结果:

这就是我得到的:

     Note  Math   English   Bio  
     1      0       0       0 
     2      0       0       2 
     3      0       0       0 

这就是我想要的:

     Note  Math   English   Bio  
     1      0       0       0 
     2      0       0       0 
     3      0       0       2 

如果没有音符“0”,我必须得到音符“3”的平均值100%。

现在我明白了:

     Note  Math   English   Bio  
     1                      0 
     2                      0 
     3                      2

而不是

     Note  Math   English   Bio  
     1      0       0       0 
     2      0       0       0 
     3      0       0       2

如何在结果集中获得“0”

有人有想法吗?

1 个答案:

答案 0 :(得分:0)

获取值计数的一种方法> 0将是:

count(case when note > 0 then note end)

(如果注释为0,则案例计算为null,不计算。)

虽然最简单的方法可能是

sum(sign(note))