在表上的绝对值查询显示单个结果

时间:2019-04-15 00:12:32

标签: sql

我遇到一个问题,我试图获取每个产品价格与平均产品价格之间的差额。

我编写了一些代码来获取产品价格的绝对值差大于平均产品价格。

SecondActivity

当我运行上面的代码时,我会得到一种产品,并且当我尝试获取所有产品及其平均价格的列表时,它们与平均价格之间的差异 产品表如下所示:product table

2 个答案:

答案 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

Demo on dbfiddle

答案 1 :(得分:1)

我有同样的问题。我玩了一下,发现此查询对我有用: 不能真正解释它为什么起作用。

希望有人可以解释

select *, ABS(P_PRICE - (select avg(P_PRICE) from product)) as Difference from product