Oracle - 如何选择列并根据平均值显示差异?

问题描述 投票:0回答:2

我有列item_name和item_cost。但是,当我想使用AVG(item_cost)显示差异时总是给我一个错误

不是单组的功能

我只是想制作一个item_name,item_cost的列表,并使用avg(item-cost) - item_cost显示每个item_cost与所有item_cost的平均值的差异。

这是我的查询语法。我的语法有什么问题?

SELECT item_name,
    item_cost,
    AVG(item_cost) AS Avgcost,
    AVG(item_cost)-item_cost AS Difference
FROM item;
database oracle oracle11g average oracledb
2个回答
3
投票

你可以使用OVER ()条款

SELECT item_name,
    item_cost,
    AVG(item_cost) OVER () AS Avgcost,
    AVG(item_cost) OVER () -item_cost AS Difference
FROM item;

1
投票

这是另一种选择,没有分析功能。

WITH avgcost AS (SELECT AVG (item_cost) avg_cost FROM item)
SELECT i.item_name,
       i.item_cost,
       a.avg_cost,
       a.avg_cost - i.item_cost diff_cost
  FROM item i, avgcost a;
© www.soinside.com 2019 - 2024. All rights reserved.