2

我有一个工作正常的查询,但我想在哪里进行更改。
查询计算 的所有笔记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”,我必须得到平均 100% 的音符“3”。

现在我得到:

     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”

有人有想法吗?

4

1 回答 1

0

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

count(case when note > 0 then note end)

(当 note 为 0 时,case 评估为 null,不计算在内。)

虽然最简单的方法可能是

sum(sign(note))
于 2013-04-17T08:15:14.903 回答