Sql division 2聚合fucntions

时间:2016-04-15 12:09:10

标签: sql oracle

我是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%。

2 个答案:

答案 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