Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1483 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Problème : Requêtes sans résultat

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème : Requêtes sans résultat

n°1559323
teycir
Posté le 12-05-2007 à 10:30:18  profilanswer
 

Bonjour;
Je suis sous mysql server 5 et je travaille avec mysql browser.
J'ai fait 4 requêtes qui ne donnent aucune ligne en résultat et il n' y a pas de message d'erreur non plus.
Cela fait 2 heures que je cherche la source d'erreur.
Pouvez-vous me dire si vous voyez des fautes de logique?
Le mpd donne une table compte (contenant id_etudiant, le montant des factures, montant des versements, no_facture...) reliée à une table étudiant (contenant id_etudiant, le nom_etudiant ...) elle-même (etudiant) reliée  à une table inscription (contenant id_etudiant, id_cursus, no_inscription...) elle-même (inscription) reliée à une table cursus (contenant id_cursus, nom_cursus, prix_cursus...).
D'avance merci.
 

Code :
  1. VI. Listez le total des factures faites aux étudiants regroupées par cursus en montrant les id_cursus et les noms de cursus
  2. SELECT c.id_cursus, c.nom_cursus,
  3. COUNT(co.no_facture) 'Total factures'
  4. FROM compte co, cursus c, etudiant e, inscription i
  5. WHERE co.id_etudiant = e.id_etudiant
  6. AND e.id_etudiant = i.id_etudiant
  7. AND i.id_cursus = c.id_cursus
  8. GROUP BY c.id_cursus;
  9. VII. A partir de la requête précédente, ajoutez une colonne indiquant le total qui devrait être facturé en faisant référence au prix du cursus
  10. SELECT c.id_cursus, c.nom_cursus, c.prix_cursus,
  11. COUNT(co.no_facture) 'Total factures',
  12. SUM(co.montant_facture) 'Total à facturer'
  13. FROM compte co, cursus c, etudiant e, inscription i
  14. WHERE co.id_etudiant = e.id_etudiant
  15. AND e.id_etudiant = i.id_etudiant
  16. AND i.id_cursus = c.id_cursus
  17. GROUP BY c.id_cursus;
  18. VIII. Faites un état des comptes étudiants ; on veut voir les noms, le total des factures, celui des versements et le solde de chaque compte
  19. SELECT e.nom_etudiant,
  20. SUM(co.montant_facture) 'Total factures',
  21. SUM(co.montant_versement) 'Total versements',
  22. (SUM(co.montant_facture) - SUM(co.montant_versement)) 'SOLDE'
  23. FROM compte co, etudiant e
  24. WHERE co.id_etudiant = e.id_etudiant
  25. GROUP BY e.nom_etudiant;
  26. IX. A partir de la requête précédente, n’éditez plus que les comptes créditeurs (qui ont plus payé qu’ils ne sont facturés)
  27. SELECT e.nom_etudiant,
  28. SUM(co.montant_facture) 'Total factures',
  29. SUM(co.montant_versement) 'Total versements',
  30. (SUM(co.montant_facture) - SUM(co.montant_versement)) 'COMPTES CREDITEURS'
  31. FROM compte co, etudiant e
  32. WHERE co.id_etudiant = e.id_etudiant
  33. GROUP BY e.nom_etudiant
  34. HAVING (SUM(co.montant_facture) - SUM(co.montant_versement)) < 0;

mood
Publicité
Posté le 12-05-2007 à 10:30:18  profilanswer
 

n°1559413
olivthill
Posté le 12-05-2007 à 15:30:18  profilanswer
 

Il me semble que la clause group by devrait contenir toutes les colonnes sauf celle du count(). Par exemple pour la première requête, il faudrait essayer avec ...GROUP BY c.id_cursus, c.nom_cursus;

n°1559693
teycir
Posté le 13-05-2007 à 19:47:54  profilanswer
 

Salut olivthill;
S'il faut que je regroupe par Group By c.id_cursus, c.nom_cursus; pour la première requête (question 6), est-ce qu'il faudra alors que pour la seconde requête (question 7) que je regroupe par Group By c.id_cursus, c.nom_cursus, c.prix_cursus; ?
Qu'en est-il pour les autres requêtes les colonnes où il y a les données générées par les fonction sum et count n'ont pas besoin  de regroupement?
Merci.

n°1559700
gocho
Posté le 13-05-2007 à 19:53:09  profilanswer
 

lorsque tu fais un group by, cette clause doit contenir tous les champs de ton select qui ne sont pas des fontions d'agregats.
 
edit :  
et donc oui pour la 7, il faudrai faire ce que tu as dit.
Ainsi que pour toutes les autres. Tu dois mettre dans ton group by tous tes champs autres que sum() et count()


Message édité par gocho le 13-05-2007 à 19:56:34
n°1559711
teycir
Posté le 13-05-2007 à 20:10:04  profilanswer
 

Merci Gocho;
j'ai une autre question: en se référant au MPD je commence à penser que les lignes AND i.id_cursus = c.id_cursus dans le where des questions 7 et 6 sont suprflues qu'en penses-tu?
Concernant les résultats de tables vide je me suis rendu compte en tapant select * from compte; que cette table est complètement vide de lignes.


Message édité par teycir le 13-05-2007 à 20:11:26
n°1559779
gocho
Posté le 13-05-2007 à 23:49:04  profilanswer
 

alors pour le "AND i.id_cursus = c.id_cursus", je ne pense pas qu'il soit inutile.
Sur quoi te bases tu ? (enfin, oui, sur le MPD. Mais qu'est ce qui te fait dire cela ?)
 
C'est  le lien entre les deux tables, si tu n'as pas cette ligne, tu vas faire un produit cartésien entre tes deux tables, et ca va etre moche...
 (c'est à dire que pour chaque compte, le SGBD va faire correspondre tous les etudiants :p)
 
Ensuite, pour la table vide, ben remplis la [:dawa]
 
edit : parce que, effectivement, tester des requetes avec des tables vides, c'est pas le mieux qu'on ait fait [:dawao]


Message édité par gocho le 13-05-2007 à 23:52:17
n°1559846
MagicBuzz
Posté le 14-05-2007 à 09:53:10  profilanswer
 

teycir a écrit :

Salut olivthill;
S'il faut que je regroupe par Group By c.id_cursus, c.nom_cursus; pour la première requête (question 6), est-ce qu'il faudra alors que pour la seconde requête (question 7) que je regroupe par Group By c.id_cursus, c.nom_cursus, c.prix_cursus; ?
Qu'en est-il pour les autres requêtes les colonnes où il y a les données générées par les fonction sum et count n'ont pas besoin  de regroupement?
Merci.


- Un sum ou un count a forcément besoin d'agrégation. le group by porte systématiquement sur l'ensemble des champs retournés par la requêtes sauf ceux fasant l'objet d'un agrégat.
 
- Sinon, "Total factures", je ne pense pas que ce soit le nombre total de factures, mais le total de leur montant.

n°1559850
MagicBuzz
Posté le 14-05-2007 à 09:58:58  profilanswer
 

Et la VI est complètement fausse du coup : tu vas chercher le prix des factures pour le "à factuer", plutôt que de prendre le montant trouvé dans la table "cursus" comme demandé.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Problème : Requêtes sans résultat

 

Sujets relatifs
Requêtes accentuéesProblème select
[PHP-GTK] Mais où est le problème ?Problème d'encodage
Nombre de résultat d'un selectProblème avec bouton on/off
[Perl - Débutant]Probleme de comparaison de 2 chainesproblème avec des méthodes inline
Problème de compilationC# - Windows Forms - problème affichage des formes
Plus de sujets relatifs à : Problème : Requêtes sans résultat


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR