2016-04-15 93 views
0

我是Oracle DB的新手,我正在尝试编写一个查询,它将计算SUM的行数,它的字段AWARD介于3到4之间,然后我需要将它们除以COUNT()所有行。这意味着我需要在那里AWARD = 1,0,-1等Sql分部2聚合函数

这里是我的查询,我试图用数偶数行:

SELECT SUM(AWARD)/COUNT(*) FROM EVALUATION 
WHERE AWARD BETWEEN 2 AND 4 ; 

不过,据我了解,我越来越COUNT仅适用于WHERE子句的行。我该怎么办?另外,我需要添加值为2的AWARD的SUM,但是,只有50%。

+0

使用子查询除以。 – SomeJavaGuy

+0

@kevinEsche你能举个例子吗? – quento

+0

Oracle支持'Avg()':https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions011.htm –

回答

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; 
+0

谢谢! 我发现第一个更优雅的解决方案。在AWARD = 2的情况下,你能帮助我获得50%的价值吗? – quento

+0

它会是什么样子:什么时候获得奖励= 2,那么奖励/ 2 – quento

1

试试这个

SELECT SUM(CASE WHEN AWARD BETWEEN 2 AND 4 THEN AWARD ELSE 0 END)/COUNT(*) 
FROM EVALUATION