2009-05-26 9 views
0

j'ai deux tables produits et commentaires
chaque produit a plusieurs examens liés par une product_id étrangère clé dans la table des commentaires
En outre, chaque examen a un champ appelé note avec une valeur décimale
i souhaite pour obtenir les noms de tous les produits dont la note moyenne est au-dessus d'un certain seuil
quelque chose dans les lignes defiltrage SQL par moyenne

SELECT p.name 
FROM products p 
INNER JOIN reviews r ON p.id = r.product_id 
WHERE avg(r.rating) > 3 

MySQL n'est pas me laisser utiliser la fonction avg dans la clause where.
Comment faire quelque chose comme ça?

Répondre

7

utilisation ayant '

SELECT p.name, avg(r.rating) as average 
FROM products p 
INNER JOIN reviews r ON p.id = r.product_id 
GROUP BY p.name 
HAVING avg(r.rating) > 3 
+1

woops - J'ai raté le « GROUP BY » - fixe –

+0

Voilà pourquoi parfois la clause HAVING est appelée « la clause WHERE des groupes » –

+0

Cela prend beaucoup plus de temps à dire que 'avoir' :) –