2012-11-28 4 views
3

이 선택을 작성하는 데 많은 시간을 보냈지만 해결할 수는 없습니다. 나는 2 개의 테이블을 가지고있다. 첫 번째 테이블은 car라고하며 PK (기본 키) id_car와 다른 열 이름 등이 있습니다. 두 번째 테이블은 등급이라고하며 id_rating (PK), id_car (FK) 및 rating_value (정수) 열이 있습니다. 당신이 생각하기에, 1 대의 차는 1 개 이상 명성을 가질 수있다. 모든 차량을 선택하고 각 차량의 평균 등급을 알고 싶습니다. 마지막으로,이 평균 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; 또한 나는 대신이 다음 집계 함수 AVG() 및 구현 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

JOIN를 사용하는 것이 좋습니다 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 
관련 문제