通过将每个项目的价格与字段的平均值进行比较,获得每个项目价格的百分比差异

时间:2014-06-04 06:54:47

标签: mysql sql

您如何获得每个类别的平均价格,将其与该类别的每个项目进行比较并获得百分比差异?

例如,在下表中,玩偶的平均价格为24,因此商品B(18美元)应 -25%,这比该类别的平均价格便宜。 ((18-24)/ 24)* 100)。

如何加入这两个查询然后进行计算?

SELECT price from `product` GROUP BY name

SELECT AVG(price) AS average_Price from `product` GROUP BY category

(price - AVG(price))/AVG(price)*100

表示例:

ID  name    category      price  
1     A     Puzzle          5
2     B     Doll            18
3     C     Puzzle          10
4     D     Outdoor         20
5     E     Brainteaser     2
6     F     Outdoor         40
7     G     Doll            30
8     H     Brainteaser     9  

3 个答案:

答案 0 :(得分:1)

您可以这样做,使用子查询的自联接,此子查询将获得每个类别的平均价格,然后在选择部分执行计算

select t.*,tt.avg_price 
,((t.price - tt.avg_price ) / tt.avg_price *100) precent_diff
from 
t
join (select category ,avg(price) avg_price from t group by category) tt
on(t.category = tt.category)

Demo

使用百分号将concat与计算部分的最终结果一起使用

select t.*,tt.avg_price 
,
concat(
((t.price - tt.avg_price ) / tt.avg_price *100)
  ,'%')
  precent_diff
from 
t
join (select category ,avg(price) avg_price from t group by category) tt
on(t.category = tt.category)

Demo with sign

答案 1 :(得分:1)

有一个内部查询来获取每个类别的AVERAGE,然后使用JOIN,如下所示:

SELECT name, product.category, price, ((price - avg_price)/avg_price)*100 as diff
FROM product
JOIN (
  SELECT category, AVG(price) as avg_price
  FROM product
  GROUP BY category
) t
ON t.category = product.category

工作演示:http://sqlfiddle.com/#!2/f25205/5

答案 2 :(得分:1)

使用嵌套查询:

select a.name, a.category, (price-avg_price)/avg_price*100 ratio
from product a
join (
  select category, avg(price) avg_price
  from product a
  group by a.category) b on a.category = b.category;