2012-11-28 35 views
3

我花了很多時間來構建這個選擇,但我無法解決它。我有兩張桌子。第一個表稱爲汽車並具有PK(主鍵)id_car和另一列名稱等。第二個表稱爲評級,並具有col_id_rating(PK),id_car(FK)和rating_value(整數)。正如你懷疑的那樣,一輛車可以有一次以上的咆哮。我想選擇所有的汽車,我想知道每輛車的平均評分。最後,我想通過這個平均desc來排序結果。我正在嘗試這樣的事情:SQL從其他表中選擇平均值

SELECT id_car, name, average 
    FROM car C, rating R 
    WHERE C.id_car = R.id_car 
    ORDER BY (average) (
     SELECT AVG(rating_value) AS average 
     FROM rating R 
     WHERE C.id_car = R.id_car) 

但它不起作用。

回答

4

對於SQL Server;此外,我建議你使用JOIN代替WHERE table1, table2..

SELECT C.id_car, name, AVG(rating_value) AS average 
FROM car C JOIN rating R 
     ON C.id_car = R.id_car 
GROUP By C.id_car, name 
ORDER BY average DESC 
+2

只是添加更多信息:如果您想要包括尚未評級的汽車,請使用LEFT JOIN。 –

+0

@ShantanuGupta +1表示:) – Kaf

+0

謝謝先生!奇蹟般有效 – matlos

0
SELECT C.name, AVG(R.rating_value) 
FROM car C, rating R 
WHERE C.id_car = R.id_car 
GROUP BY C.name 
ORDER BY AVG(R.rating_value) DESC 
1

這實現了聚合函數AVG()然後GROUP BY的車廂ID名稱:

select c.id_car, c.name, avg(r.rating_value) aver 
from car c 
left join rating r 
    on c.id_car = r.id_car 
group by c.id_car, c.name 
order by aver desc 

使用LEFT JOIN將包括所有汽車在結果中甚至還沒有被評級。

0
SELECT c.id_car, c.name,avg(r.rating_value) as rating 
FROM car c 
join rating r 
on c.id_car = r.id_car 
group by r.id_car 
order by rating