2017-07-13 7 views
0

Voici la requête originale:Réécrivez cette requête SQL sans clause HAVING?

select flavor, max(price) mp 
    from Product 
    where flavor != 'chocolate' 
    group by flavor having avg(price) < 4 
    order by flavor; 

m'a confié la tâche de réécrire cette requête sans clause HAVING, mais je suis encore à apprendre ce genre de choses, et je ne suis pas vraiment sûr de savoir comment aborder ce exactement. Comme un indice, on m'a dit d'utiliser une vue en ligne, mais je continue d'obtenir des erreurs avec ma requête.

Et voici la requête que j'ai écrit:

select flavor, max(price) mp from (select flavor, price, avg(price) ap from Product where flavor != 'chocolate' group by flavor,price) prod where ap < 4 group by flavor order by flavor;

Je reçois encore une ligne supplémentaire dans mon résultat. Qu'est-ce qui n'est pas pareil dans ma requête?

+0

Vous devriez calculera MAX avec AVG; en sélectionnant «prix» comme vous le faites actuellement, vous obtiendrez un prix effectivement aléatoire choisi pour chaque saveur de produit. ... quel est le problème avec l'utilisation d'un HAVING de toute façon? – Uueerdo

+0

Avez-vous essayé de mettre le fichier avg sur le filtre 'where'? –

+0

C'est un exercice pour une classe de mieux comprendre les sous-requêtes et les vues en ligne. J'ai finalement compris, @Tom a eu la bonne idée. – Jordan

Répondre

1

On dirait que vous avez besoin de quelque chose comme:

select prod.flavor, prod.MaxPrice 
from (
    select flavor, max(price) AS MaxPrice, avg(price) AS AvgPrice 
    from Product 
    where flavor != 'chocolate' 
    group by flavor) prod 
where prod.AvgPrice < 4 
order by flavor; 
+0

C'était parfait! Je vous remercie!!! – Jordan