在所有行上显示SQL AVG函数值

时间:2013-09-09 01:52:15

标签: sql average

我的oracle表,“invoice”看起来像这样。

   INV_NUM   CUST_NUM INV_DATE             INV_AMOUNT

  8000       1000 23-Mar-08                235.89
  8001       1001 23-Mar-08                312.82
  8002       1001 30-Mar-08                 528.1
  8003       1000 12-Apr-08                194.78
  8004       1000 23-Apr-08                619.44

我需要编写一个select查询,它将显示inv_num,inv_amount和平均inv_amount。预期的输出是这样的。

   INV_NUM   INV_AMOUNT       AVG(INV_AMOUNT)

  8000       235.89               378.206
  8001       312.82               378.206
  8002       528.1                378.206
  8003       194.78               378.206
  8004       619.44               378.206

我希望AVG函数的值在每一行中重复。我知道AVG函数只返回一行。我在尝试此查询时遇到错误。

select inv_num,inv_amount,avg(inv_amount) from invoice;

ERROR at line 1: ORA-00937: not a single-group group function

有没有办法让avg值显示在每一行?我需要一些帮助来解决这个问题。谢谢。

1 个答案:

答案 0 :(得分:5)

您想使用分析函数:

select inv_num, inv_amount, avg(inv_amount) over () as avg_inv_amount
from invoice;

分析函数是一类与聚合函数非常相似的函数。但是,不是减少行数,而是将值放在原始数据的每一行上。在这种情况下,括号是空的。他们也可以(在这种情况下)采用partition by条款。例如,以下将给出每个客户的平均值:

select inv_num, inv_amount, avg(inv_amount) over (partition by cust_num) as avg_inv_amount
from invoice;