您如何获得每个类别的平均价格,将其与该类别的每个项目进行比较并获得百分比差异?
例如,在下表中,玩偶的平均价格为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
答案 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)
使用百分号将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)
答案 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
答案 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;