2010-11-30 11 views
1

J'ai 2 TableSimple SQL requête Select entre 2 tables

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 

Je dois écrire une requête SQL qui va obtenir tous userID dans l'ordre croissant pour nombre de fois nominale (5 étoiles)

+0

Eh bien, c'est très simple. Qu'avez-vous fait jusqu'à présent? –

Répondre

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

Voici un exemple:

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) 

Si le résultat ne nécessite pas des utilisateurs sans aucune cinq étoiles, vous pouvez même omettre le uSERTABLE tout à fait.

0

Je suppose que vous avez mentionné 5 étoiles comme le système de notation que vous utilisez et que vous ne souhaitez que pour récupérer les utilisateurs ayant une note de 5 étoiles.

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 

Ceci donnera à l'utilisateur la note moyenne de chaque utilisateur et affiche ses noms.

userName averageRating 
test1 4.5000 
test2 1.7500