在所有行中显示 SQL AVG 函数的值

3

我的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

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

8
您想要使用分析函数:
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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接