复杂的平均计算

时间:2010-11-16 22:28:23

标签: sql oracle


我的表格值如下:

MONTH  | value1 | value2|
-------|--------|-------|
2010/08|     0  |  700  |
2010/08|     0  |    0  |
2010/08| 41166  | 1500  |
2010/09|     0  |  700  |
2010/09|     0  | 1500  |
2010/09|     0  |    0  |
2010/10|     0  |    0  |
2010/10|     0  | 1500  |
2010/10|     0  |  700  |
2010/11|     0  |  700  |
2010/11|     0  |    0  |
2010/11|     0  | 1500  |
2010/11|     0  |    0  |

现在此查询返回按月分组的value2 / value1的总和

SELECT month, SUM(value2) / SUM(value1)*100 as percent
 GROUP BY month
------------------------
MONTH   |     PERCENT
--------|---------------
2010/08 |5,3442161006656
2010/09 |              0
2010/10 |              0
2010/11 |              0

我想要的是计算可以这样做的平均值:

SELECT AVG(percent) 
  FROM ( SELECT month, SUM(value2) / SUM(value1)*100 as percent
          GROUP BY month)
-------------
|AVG(percent)|
-------------|
|1,336       |

但我的问题是我不应该使用sub_query而不应该使用GROUP BY ,是否可能?提前感谢您的回答

1 个答案:

答案 0 :(得分:0)

也许您正在寻找COMPUTE

COLUMN dummy NOPRINT
COMPUTE AVG OF percent ON dummy
BREAK ON dummy
SELECT NULL AS dummy, SUM(value2) / SUM(value1)*100 AS percent
GROUP BY month
ORDER BY month

这会生成一行,其汇总值低于查询结果。

由于我不了解Oracle,我不知道这个特定的语法是否适合你。 SQL Server虽然有一个COMPUTE子句,但它的工作方式略有不同。如果Oracle没有类似的东西,我会感到惊讶。

相关问题