我的查询工作正常,但我想在哪里进行更改
查询会计算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”
有人有想法吗?
答案 0 :(得分:0)
获取值计数的一种方法> 0将是:
count(case when note > 0 then note end)
(如果注释为0,则案例计算为null,不计算。)
虽然最简单的方法可能是
sum(sign(note))