我遇到一个问题,我试图获取每个产品价格与平均产品价格之间的差额。
我编写了一些代码来获取产品价格的绝对值差大于平均产品价格。
SecondActivity
当我运行上面的代码时,我会得到一种产品,并且当我尝试获取所有产品及其平均价格的列表时,它们与平均价格之间的差异 产品表如下所示:product table
答案 0 :(得分:1)
发生这种情况的原因是您正在使用不带GROUP BY
子句的聚合函数,这意味着您最终将获得所有数据(即一行)的聚合结果。您需要分别计算平均价格,然后从每种产品的价格中减去平均价格。像这样:
SELECT p1.*, ABS(p1.P_PRICE - p2.avg_price) AS Difference
FROM product p1
CROSS JOIN (SELECT AVG(P_PRICE) AS avg_price FROM product) p2
或者您可以在子查询中生成平均价格,但这可能会降低效率。
SELECT *, ABS(P_PRICE - (SELECT AVG(P_PRICE) AS avg_price FROM product)) AS Difference
FROM product
答案 1 :(得分:1)
我有同样的问题。我玩了一下,发现此查询对我有用: 不能真正解释它为什么起作用。
希望有人可以解释
select *, ABS(P_PRICE - (select avg(P_PRICE) from product)) as Difference from product