2010-04-12 4 views
2

Ma requête actuelle se lit comme suit:MySQL: Est-il possible de calculer MAX (AVG (champ))?

SELECT entry_id, user_id, cat_id, AVG(rating) as avg_rate 
FROM `entry_rate` 
WHERE 1 
GROUP BY entry_id 

cat_id concerne différentes catégories: 1, 2, 3 ou 4

Est-il possible que je peux trouver la moyenne maximale pour chaque utilisateur dans chaque catégorie sans mettre en place une table supplémentaire? Le retour pourrait être 4 avg_rate maximum pour chaque user_id

Visitez le lien ci-dessous par exemple:

http://lh5.ggpht.com/_rvDQuhTddnc/S8Os_77qR9I/AAAAAAAAA2M/IPmzNeYjfCA/s800/table1.jpg

+0

Merci pour l'édition Daniel! – Brad

Répondre

3

Ne peut pas être le moyen le plus efficace:

select user_id, cat_id, MAX(avg_rate) 
FROM (
    SELECT entry_id, user_id, cat_id, AVG(rating) as avg_rate 
    FROM entry_rate 
    GROUP BY entry_id, user_id, cat_id) t 
GROUP BY user_id, cat_id 
+0

Vous devez également regrouper par entry_id et user_id dans la requête interne. En outre, "WHERE 1" n'est pas nécessaire. –

+0

@BlueRaja, vous avez raison, je viens de copier sa requête qui a aussi ces problèmes. Fixé. – tloflin

+0

@tloflin et @ BlueRaja- oh mon dieu! vous êtes des sorciers! J'y ai passé un moment sans aucune chance (je suis un newb ...). JE VOUS REMERCIE! BTW, quel est le «t» pour la fin de la 5e ligne? C'est le seul élément que je ne comprends pas. – Brad

1
SELECT s.user_id,s.cat_id,max(s.avg_rate) FROM (
    SELECT entry_id, user_id, cat_id, AVG(rating) as avg_rate 
    FROM entry_rate 
    GROUP BY entry_id,user_id,cat_id) as s 
GROUP BY s.user_id,s.cat_id 
+0

C'est aussi une excellente réponse! Merci (mais un peu trop lent pour la coche verte!) – Brad

2

Vous peut faire cette déclaration.

SELECT entry_id, user_id, cat_id, AVG(rating) as avg_rate 

FROM 'entry_rate' 

GROUP BY entry_id 

order by AVG(rating) DESC 

limit 1 

ce faire de l'ordre de résultat par avg(rating) et sélectionnez la première ligne. et peut faire le limit 1, 1 pour sélectionner le deuxième élément max

Questions connexes