2010-11-30 5 views
1

У меня есть 2 таблицыПростой SQL Select Query между 2 таблицы

First table - userTable 

usedID userName 
1   someName 
2   someOthername 

Second Table - ratingTable 

userID ratingValue 
1   5 
1   3 
1   5 
1   3 
2   5 
2   5 
2   3 
2   5 

Мне нужно написать запрос SQL, который будет получать все идентификатор_пользователя в порядке возрастания по количеству раз номинальному (5 звезд)

+0

Ну, это очень просто. Что вы сделали до сих пор? – 2010-11-30 22:50:07

ответ

1
SELECT u.userID, u.userName, COUNT(*) AS ratingCount 
    FROM userTable u 
     INNER JOIN ratingTable r 
      ON u.userID = r.userID 
       AND r.ratingValue = 5 
    GROUP BY u.userID, u.userName 
    ORDER BY ratingCount 
1

Вот один пример:

select u.UserId 
,  count(r.ratingValue) 
from userTable u 
left join 
     ratingTable r 
on  u.userID = r.userID 
     and r.ratingValue = 5 
group by 
     u.UserID 
order by 
     count(r.ratingValue) 

Если результат не требует от пользователей без каких-либо оценок пяти звезд, вы можете даже опускать userTable вообще.

0

Я предполагаю, что вы упомянули 5 звезд, как система рейтинга вы используете, и не то, что вы только хотите, чтобы получить пользователь с рейтингами 5 звезд.

SELECT u.userName, avg(r.ratingValue) as averageRating 
FROM userTable u 
LEFT JOIN ratingTable r ON u.userID = r.userID 
GROUP BY u.UserID 
ORDER BY avg(r.ratingValue) desc 

Это позволит получить средний рейтинг каждого пользователя и отобразить его имена.

userName averageRating 
test1 4.5000 
test2 1.7500