2 votes

Agrégat MySQL dans la clause WHERE ?

J'ai le schéma de base de données suivant :

Customer(ssn, name, gender, city)
Vehicle(vin, make, model, year)
BuyVehicle(bvssn, bvvin, price, year)

BuyVehicle.bvvin est une clé étrangère de Vehicle.vin y BuyVehicle.bvssn est une clé étrangère de Customer.ssn . J'essaie de sélectionner les noms des personnes qui ont acheté des véhicules à un prix supérieur à la moyenne de ce véhicule spécifique.

Jusqu'à présent, j'ai déterminé comment calculer la moyenne des véhicules :

SELECT AVG(price) as avg_price, v.maker, v.model, v.year FROM BuyVehicle bv, Vehicle v, Customer c WHERE v.vin = bv.BVVIN AND c.ssn = bv.bvssn GROUP BY maker, model, year;

J'ai essayé d'entrer un price > avg_price dans le WHERE clause :

SELECT AVG(price) as avg_price, v.maker, v.model, v.year FROM BuyVehicle bv, Vehicle v, Customer c WHERE v.vin = bv.BVVIN AND c.ssn = bv.bvssn AND bv.price > avg_price GROUP BY maker, model, year;

mais MySQL me dit que le avg_price n'existe pas. Ai-je adopté la mauvaise approche pour résoudre ce problème ?

9voto

Nesim Razon Points 4846

Vous devez utiliser avoir :

SELECT AVG(price) as avg_price, v.maker, v.model, v.year, bv.price 
FROM BuyVehicle bv, Vehicle v, Customer c WHERE v.vin = bv.BVVIN AND c.ssn = bv.bvssn
GROUP BY maker, model, year
having bv.price > avg_price

0voto

user1727088 Points 159

Lorsque vous travaillez avec des agrégats, il y a une clause séparée que vous devez utiliser appelée 'HAVING' qui va après le groupe par mais il semble que la requête que vous essayez d'écrire est en fait plus complexe que cela.

qu'est-ce que vous voulez voir dans les résultats ?

Je pense que vous devez faire un where par rapport à une sous-requête avec la moyenne pour obtenir ce que je suppose que vous voulez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X