2016-06-14 5 views
0

Frage: Finden Sie heraus, der durchschnittliche Preis von PCs und Laptops von Hersteller A.
Ergebnismenge: ein Gesamtdurchschnittspreis für alle Artikel.Falscher Durchschnitt in einer SQL-Abfrage

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) 

Ich habe den folgenden Code:

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 

Allerdings bekomme ich einen Durchschnitt von 794,4444 und Lösung 754,1666

in ist: http://www.sql-ex.ru/learn_exercises.php Übung 26

Jede mögliche Hilfe sehr geschätzt

Antwort

2

Es könnte bessere Lösungen, aber das Problem in Ihrer Abfrage zu adressieren:

Mit union ohne all Qualifier entfernt Duplikate und vermutlich könnte es ein PC und ein Laptop mit dem gleichen Preis. Ändern Sie es in union all, um Duplikate aus beiden Sets zu behalten, und Sie erhalten wahrscheinlich das erwartete Ergebnis.

+0

das war es. Ich danke dir sehr – Sam

1

Nur klar zu sein, eine einfachere Version sieht wie folgt aus:

select avg(price) 
from pc 
where model in (select model 
       from product 
       where maker='A');