3

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

   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

我需要编写一个选择查询来显示 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

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

4

1 回答 1

7

您想使用分析功能:

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;
于 2013-09-09T01:59:38.627 回答