Aller au contenu

Aide pour une requête SQL


Messages recommandés

Salut tout le monde.

J'suis pas très bon en SQL, et j'ai une requête à faire pour un projet, mais j'arrive pas à la faire fonctionner.

L'énoncé de la requête :

Afficher les statistiques / polices de l’ensemble des sinistres, et en particulier le montant total des sommes versées

Donc je pensais afficher la somme des montants des voitures qui ont eu un accident et qui ont été considéré comme épave (donc remboursement complet).

La somme des montants des réparations.

Le nombre total de sinistres.

Et le nombre d'épaves lors de ces sinistres (les voitures complètement détruite).

ET tout ça pour chaque police.

La BDD :

http://nsa07.casimages.com/img/2009/06/06/...35631852350.png

Alors j'ai fait ça comme requête :

SELECT P.LibPolice, SUM(R.MontantR) AS TotalRéparation, SUM(A.ValeurEstimée) AS TotalRemplacement, COUNT(S.NumSinistre) AS NBSinistres, COUNT(RE.NumRapport) AS NbEpaves
FROM Police AS P, Automobile AS A, Dossier AS D, Réparation AS R, Rapport_Expertise AS RE, Sinistre AS S, Contrat AS C
WHERE P.NumPolice = C.NumPolice
AND C.NumMatricule = A.NumMatricule
AND C.NumContrat = S.NumContrat
AND S.NumSinistre = D.NumSinistre
AND D.NumDossier = R.NumDossier
AND RE.NumDossier = D.NumDossier
AND RE.NumDossier IN (SELECT RE.NumDossier FROM Rapport_Expertise AS RE WHERE RE.Epave = -1)
GROUP BY 1
ORDER BY 1;

Une voiture est soit déclarée épave, à partir de là l'assurance doit rembourser la valeur de la voiture.

Soit elle peu être réparé et l'assurance paye le montant des réparations.

Épave étant un booléen, -1 voulant dire qu'il s'agit bien d'une épave.

Sauf que quand je l'exécute j'ai un message d'erreur :

090606035639675944.png

Et là j'avoue que je suis un peu coincé car je comprend pas ce qu'il veut me dire.

Si vous pouviez m'expliquer ce qu'il entend par ce message, ça m'aiderait déjà beaucoup.

Merci de votre aide !

Lien vers le commentaire
Partager sur d’autres sites

A première vue je dirais qu'il y a un problème au niveau de la clause GROUP BY. En effet dans ta clause SELECT tu n'utilise que des fonctions d'agrégat (qui utilisent des "groupes" de données) mais pas le libellé LibPolice, donc il va y avoir un problème du fait que tu demande potentiellement plusieurs lignes de libellés mais une seule ligne de tout le reste.

La règle à suivre est : Lors de l'utilisatoin de GROUP BY, ne rien mettre dans le SELECT qui ne soit pas une fonction d'agrégat (sum, max, avg, etc...) et qui ne serve pas de critère de regroupement dans GROUP BY. La colonne LibPolice enfreint cette règle :)

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...