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



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

不是单组组函数

我只想列出 item_name,item_cost的列表,并显示每个item_cost使用 avg(item-cost) - item_cost的平均值。

这是我的查询语法。我的语法怎么了?

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

您可以使用OVER ()子句

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

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

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;

最新更新