我是Oracle DB的新手,我正在尝试编写一个查询行的SUM,其中字段AWARD在3到4之间,但是我需要将它们除以所有行的COUNT()。这意味着我需要计算AWARD = 1,0,-1等的偶数行。
这是我尝试使用的查询:
SELECT SUM(AWARD)/COUNT(*) FROM EVALUATION
WHERE AWARD BETWEEN 2 AND 4 ;
但是,据我所知,我只获得了适合WHERE子句的行的COUNT。我该怎么办?另外,我需要添加值为2的AWARD的SUM,但只需要50%。
答案 0 :(得分:3)
您可以对AVG()
使用条件聚合:
SELECT AVG(CASE WHEN AWARD BETWEEN 2 AND 4 THEN AWARD ELSE 0 END)
FROM EVALUATION;
当然,你可以自己做分组,如果你真的,真的想:
SELECT SUM(CASE WHEN AWARD BETWEEN 2 AND 4 THEN AWARD ELSE 0 END) / COUNT(*)
FROM EVALUATION;
编辑(回应评论):
SELECT AVG(CASE WHEN AWARD = 2 THEN AWARD / 2
WHEN AWARD BETWEEN 2 AND 4 THEN AWARD -- although 2 matches, it is caught in the first condition
ELSE 0
END)
FROM EVALUATION;
答案 1 :(得分:1)
试试这个
SELECT SUM(CASE WHEN AWARD BETWEEN 2 AND 4 THEN AWARD ELSE 0 END)/COUNT(*)
FROM EVALUATION