我的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值显示在每一行?我需要一些帮助来解决这个问题。谢谢。
答案 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;