2009-06-19 9 views
0

J'ai une table mysql appelé RATING avec cette structure:MySQL requête aide

ID, USERNAME, EVALUATION, RATER, MOIS

Je veux être en mesure de montrer un classement des utilisateurs commandés par leur moyenne note pour le mois en cours.

Par exemple:

1, Bob, 10, Rita, juillet

2, Bob, 8, Sue, juillet

3, Rita, 9, Bob, juillet

4, Sue, 4, Rita, jul

5, Rita, 10, Sue, jul

Je veux une requête SQL qui wo ULD produisent ces résultats:

Rita: 9.5

Bob: 9

Sue: 4

Toutes les idées s'il vous plaît?

Un grand merci

Oliver.

Répondre

2

En supposant que la colonne mois est un datetime:

select username, avg(rating) 
from rating 
where YEAR(curdate()) = YEAR(rating.month) 
and MONTH(curdate()) = MONTH(rating.month) 
group by username 

Si ce sont les 3 premiers caractères du mois, remplacer la clause WHERE avec:

where LEFT(MONTHNAME(curdate()),3) = rating.month 
2
select username, avg(rating), month from RATING group by username,month 

Voyant que vous avez ' JUL 'comme votre mois, je suppose que c'est un varchar. Si vous voulez juste les résultats pour Jul:

select username, avg(rating) from RATING where month = 'JUL' group by username 
1
SELECT `username`, AVG(`rating`) AS average FROM RATING GROUP BY `username` 
+0

Ceci est la note moyenne pour tous les temps, non pas pour le mois en cours? – Andomar

+0

Mon mauvais, puis ajoutez WHERE 'month' = LEFT (MONTHNAME (NOW()), 3) avant la partie GROUP BY. – Residuum