2009-08-06 10 views
1
SELECT username, (SUM(rating)/count(*)) as TheAverage, count(*) as TheCount 
FROM ratings 
WHERE month ='Aug' AND TheCount > 1 
GROUP BY username 
ORDER BY TheAverage DESC, TheCount DESC 

Je sais que c'est très proche (je pense) mais il est dit que 'TheCount' n'exsiste pas dans la clause WHERE et la clause ORDER.Aide à la requête MySQL

Le tableau est:

id, nom d'utilisateur, note, mois

Et je suis en train de travailler la note moyenne pour chaque utilisateur pour ensuite les résultats par note moyenne et le nombre de notes.

Aidez-nous s'il vous plaît.

Répondre

1

Si vous groupez et comptez, vous devez avoir:

SELECT username, (SUM(rating)/COUNT(*)) as TheAverage, Count(*) as TheCount 
    FROM rating 
    WHERE month='Aug' 
    GROUP BY username 
    HAVING TheCount > 1 
    ORDER BY TheAverage DESC, TheCount DESC 
2
SELECT username, (SUM(rating)/count()) as TheAverage, count() as TheCount 
FROM ratings 
WHERE month ='Aug' 
GROUP BY username 
HAVING TheCount > 1 
ORDER BY TheAverage DESC, TheCount DESC 

EDIT:

Il semble que je n'ai pas regardé assez près.

Je pense que ça va marcher maintenant.

+1

Vous venez d'utiliser 'TheAverage', qui est un alias, dans la clause order by. –

+0

Merci, mais cela ne semble pas fonctionner. A un problème avec le compte() – Oliver

1

Vous pouvez utiliser l'agrégat AVG:

SELECT username, month, AVG(rating) as TheAverage, COUNT(*) as TheCount 
FROM ratings 
WHERE month ='Aug' 
GROUP BY 
     username 
HAVING COUNT(*) > 1 
ORDER BY 
     TheAverage DESC, TheCount DESC 

Groupement par month est innesessary dans MySQL, puisque votre month est filtré et MySQL prend en charge la sélection d'une colonne non groupée dans une liste SELECT d'une requête GROUP BY (renvoyant une valeur aléatoire dans le groupe).