在SQL查询中获得错误的平均值

时间:2016-06-14 19:33:50

标签: sql average

  

问题:找出制造商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

任何帮助都将受到高度赞赏

3 个答案:

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