0
votes

Interrogatoire SQL qui devrait renvoyer des produits vendus plus de 400 fois revient plus que cela

Je crée un didacticiel basé sur une base de données "Magasins". C'est la partie pratique au tutoriel. J'essaie d'obtenir une liste de produits ayant une quantité d'articles vendue ( Qté ) plus de 400. Qu'est-ce qui ne va pas avec le code? Il devrait fonctionner juste bien? XXX

Le résultat que je reçois comprend des produits avec une quantité inférieure à 400 fois. J'espère que l'image est un indicateur assez bon.

 résultats:


2 commentaires

Le titre contient: 400 fois . Dans la question que vous mentionnez 200 fois et votre question de requête sur la quantité. Clarifier ce que vous voulez.


Pourquoi avez-vous besoin de Somme si vous souhaitez comparer le Qté lui-même?


3 Réponses :


1
votes

Vous n'avez aucune agrégation et aucun critère de jointure dans la requête principale, mais vous n'avez même pas besoin d'une sous-requête:

select max(prod_name), products.prod_id, sum(qty) 
 from products 
 inner join sales on products.prod_id = sales.prod_id
 group by products.prod_id
 having sum(qty)>400;


0 commentaires

3
votes

Je recommanderais d'écrire la requête comme suit: xxx

notes:

  • jamais Utiliser des virgules dans la clause de . Toujours Utilisez le bon, explicite, standard , lisible joindre syntaxe.
  • Un problème majeur de votre requête est le produit cartésien sans filtrage.
  • agrégat par les colonnes non grises dans le Sélectionnez , surtout si vous apprenez SQL.
  • Vous avez Qté dans le Sélectionnez . Il devrait être résumé.

0 commentaires

0
votes

Je ne pense pas que vous devez utiliser somme code> puisque vous essayez de comparer les valeurs de Qté code> pour chaque produit. Vous pouvez faire avoir Qté> 400 code>.

 select prod_name, qty from products, sales 
 where products.prod_id in (select prod_id from sales 
 group by prod_id having qty >400);


0 commentaires