问题:找出制造商A生产的个人电脑和笔记本电脑的平均价格 结果集:所有项目的总体平均价格。
Database Schema: Product(maker, model, type) PC(code, model, speed, ram, hd, cd, price) Laptop(code, model, speed, ram, hd, screen, price) Printer(code, model, color, type, price)
我有以下代码:
with totalproducts
as
(select price
from pc
where model in (
select model
from product
where maker='A'
)
union
select price
from laptop
where model in (
select model
from product
where maker='A'
))
select avg(price) from totalproducts
然而,我的平均值为794.4444,解决方案为754.1666
in:http://www.sql-ex.ru/learn_exercises.php练习26
任何帮助都将受到高度赞赏
答案 0 :(得分:2)
可能有更好的解决方案,但要解决查询中的问题:
在没有union
限定符的情况下使用all
会删除重复项,并且可能会有相同价格的电脑和笔记本电脑。将其更改为union all
以保留两个集合中的重复项,您可能会获得预期的结果。
答案 1 :(得分:1)
为了清楚起见,一个更简单的版本看起来像这样:
{{1}}
答案 2 :(得分:-1)
您的解决方案是使用union all
:
SELECT AVG(price) AS price
FROM (SELECT price,'pc' AS type
FROM pc JOIN product ON product.model=pc.model WHERE maker ='a'
UNION ALL
SELECT price, 'laptop' AS type
FROM laptop JOIN product ON product.model=laptop.model WHERE maker ='a')
AS tow (price,type)