我花了很多时间来构建这个选择,但我无法解决它。我有2张桌子。第一个表叫做car并且有PK(主键)id_car和另一个列名等等。第二个表称为评级,并具有colums id_rating(PK),id_car(FK)和rating_value(整数)。如你所料,一辆车可以有多个咆哮。我想选择所有车型,我想知道每辆车的平均评级。最后,我想通过这个平均desc来排序结果。我正在尝试这样的事情:
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)
但它不起作用。
答案 0 :(得分: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
答案 1 :(得分: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
将包括结果中的所有汽车,即使那些尚未评级的汽车。
答案 2 :(得分: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
答案 3 :(得分: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