Problème : requêtes sans résultat

cirtey Messages postés 30 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 8 mai 2009 - 12 mai 2007 à 10:34
cirtey Messages postés 30 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 8 mai 2009 - 13 mai 2007 à 19:10
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.

Voici le code:

VI.    Listez le total des factures faites aux étudiants regroupées par cursus en montrant les id_cursus et les noms de cursus

SELECT c.id_cursus, c.nom_cursus,
COUNT(co.no_facture) 'Total factures'
FROM compte co, cursus c, etudiant e, inscription i
WHERE co.id_etudiant = e.id_etudiant
AND e.id_etudiant = i.id_etudiant
AND i.id_cursus = c.id_cursus
GROUP BY c.id_cursus;

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

SELECT c.id_cursus, c.nom_cursus, c.prix_cursus,
COUNT(co.no_facture) 'Total factures',
SUM(co.montant_facture) 'Total à facturer'
FROM compte co, cursus c, etudiant e, inscription i
WHERE co.id_etudiant = e.id_etudiant
AND e.id_etudiant = i.id_etudiant
AND i.id_cursus = c.id_cursus
GROUP BY c.id_cursus;

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

SELECT e.nom_etudiant,
SUM(co.montant_facture) 'Total factures',
SUM(co.montant_versement) 'Total versements',
(SUM(co.montant_facture) - SUM(co.montant_versement)) 'SOLDE'
FROM compte co, etudiant e
WHERE co.id_etudiant = e.id_etudiant
GROUP BY e.nom_etudiant;

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)

SELECT e.nom_etudiant,
SUM(co.montant_facture) 'Total factures',
SUM(co.montant_versement) 'Total versements',
(SUM(co.montant_facture) - SUM(co.montant_versement)) 'COMPTES CREDITEURS'
FROM compte co, etudiant e
WHERE co.id_etudiant = e.id_etudiant
GROUP BY e.nom_etudiant
HAVING (SUM(co.montant_facture) - SUM(co.montant_versement)) < 0;

2 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
13 mai 2007 à 18:19
Dans ta première requete tu fais un group by invalide.
Il faut que toutes les colonnes du select (a part les aggrégats) se trouvent dans la clause group by :

SELECT c.id_cursus, c.nom_cursus,
COUNT(co.no_facture) 'Total factures'
FROM compte co, cursus c, etudiant e, inscription i
WHERE co.id_etudiant = e.id_etudiant
AND e.id_etudiant = i.id_etudiant
AND i.id_cursus = c.id_cursus
GROUP BY c.id_cursus, c.nom_cursus;
0
cirtey Messages postés 30 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 8 mai 2009
13 mai 2007 à 19:10
Bonjour Yann;
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.
0
Rejoignez-nous