Problème requête SQL

Résolu
jjg65 Messages postés 28 Date d'inscription mercredi 23 mars 2011 Statut Membre Dernière intervention 16 août 2011 - 16 août 2011 à 23:01
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 17 août 2011 à 11:51
Bonsoir,
A partir d'une table (voir tableau 1) contenant des données propres aux résultats de rencontres de football je souhaiterais établir une requête permettant d'établir le classement général d'une journée de championnat de football.
J'ai écrit une requête permettant d'établir le classement général portant sur les 3 journées de championnat (voir requête 2) et requête addition pour le résultat. La requête fonctionne correctement.
La requête 1 me permet d'établir le classement général d'une journée de championnat en particulier mais ça n'a aucun intérêt dans la conception de mon programme.
Ce que je recherche si j'ai 3 journées de championnats jouées est d'établir le classement général pour les 2 premières journée en faisant abstraction de la 3 ème.
Je ne réussis pas à trouver la bonne requête.
J'espérais à travers la requête 3 pouvoir établir le classement général pour les 2 premières journées de championnat. Malheureusement la requête affiche 8 lignes (à la place de 4) et les équipes apparaissent 2 fois et l'opération des sommes ne fonctionne plus.
Quelqu'un aurait-il une idée ?
Merci d'avance.

tableau 1
Journee Championnat Equipe Joué Gagné Perdu Nul But Pour But Contre Point
1 A Oui 1 0 0 3 1 3
1 B Oui 0 1 0 1 3 0
1 C Oui 0 0 1 2 2 1
1 D Oui 0 0 1 2 2 1

2 A Oui 1 0 0 1 0 3
2 B Oui 1 0 0 5 1 3
2 C Oui 0 1 0 0 1 0
2 D Oui 0 1 0 1 5 0

3 A Oui 0 0 1 2 2 1
3 B Oui 0 1 0 0 1 0
3 C Oui 1 0 0 1 0 3
3 D Oui 0 0 1 2 2 1


Requête addition
Journee Championnat Equipe Joué Gagné Perdu Nul But Pour But Contre Point
3 A Oui 2 0 1 6 3 7
3 C Oui 1 0 1 3 3 4
3 B Oui 1 2 0 6 5 3
3 D Oui 0 0 2 5 9 2


requête 1
SELECT DISTINCT (TableClassementChampionnatBelgique.IdClub) AS Expr1, Count(TableClassementChampionnatBelgique.JoueTotal) AS CompteDeJoueTotal, Sum(TableClassementChampionnatBelgique.TotalVictoires) AS SommeDeTotalVictoires, Sum(TableClassementChampionnatBelgique.TotalDefaites) AS SommeDeTotalDefaites, Sum(TableClassementChampionnatBelgique.TotalNuls) AS SommeDeTotalNuls, Sum(TableClassementChampionnatBelgique.TotalButsPour) AS SommeDeTotalButsPour, Sum(TableClassementChampionnatBelgique.TotalButsContre) AS SommeDeTotalButsContre, Sum(TableClassementChampionnatBelgique.TotalPointGeneral) AS SommeDeTotalPointGeneral
FROM TableClassementChampionnatBelgique
GROUP BY TableClassementChampionnatBelgique.IdClub, TableClassementChampionnatBelgique.NumeroJourneeChampionnat
HAVING (((TableClassementChampionnatBelgique.NumeroJourneeChampionnat)=2))
ORDER BY Sum(TableClassementChampionnatBelgique.TotalPointGeneral) DESC;

requête 2
SELECT DISTINCT (TableClassementChampionnatBelgique.IdClub) AS Expr1, Count(TableClassementChampionnatBelgique.JoueTotal) AS CompteDeJoueTotal, Sum(TableClassementChampionnatBelgique.TotalVictoires) AS SommeDeTotalVictoires, Sum(TableClassementChampionnatBelgique.TotalDefaites) AS SommeDeTotalDefaites, Sum(TableClassementChampionnatBelgique.TotalNuls) AS SommeDeTotalNuls, Sum(TableClassementChampionnatBelgique.TotalButsPour) AS SommeDeTotalButsPour, Sum(TableClassementChampionnatBelgique.TotalButsContre) AS SommeDeTotalButsContre, Sum(TableClassementChampionnatBelgique.TotalPointGeneral) AS SommeDeTotalPointGeneral
FROM TableClassementChampionnatBelgique
GROUP BY TableClassementChampionnatBelgique.IdClub
ORDER BY Sum(TableClassementChampionnatBelgique.TotalPointGeneral) DESC;

requête 3
SELECT DISTINCT (TableClassementChampionnatBelgique.IdClub) AS Expr1, Count(TableClassementChampionnatBelgique.JoueTotal) AS CompteDeJoueTotal, Sum(TableClassementChampionnatBelgique.TotalVictoires) AS SommeDeTotalVictoires, Sum(TableClassementChampionnatBelgique.TotalDefaites) AS SommeDeTotalDefaites, Sum(TableClassementChampionnatBelgique.TotalNuls) AS SommeDeTotalNuls, Sum(TableClassementChampionnatBelgique.TotalButsPour) AS SommeDeTotalButsPour, Sum(TableClassementChampionnatBelgique.TotalButsContre) AS SommeDeTotalButsContre, Sum(TableClassementChampionnatBelgique.TotalPointGeneral) AS SommeDeTotalPointGeneral
FROM TableClassementChampionnatBelgique
GROUP BY TableClassementChampionnatBelgique.IdClub, TableClassementChampionnatBelgique.NumeroJourneeChampionnat
HAVING (((TableClassementChampionnatBelgique.NumeroJourneeChampionnat)>0 And (TableClassementChampionnatBelgique.NumeroJourneeChampionnat)<3))
ORDER BY Sum(TableClassementChampionnatBelgique.TotalPointGeneral) DESC;

1 réponse

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
17 août 2011 à 11:51
Salut

Première chose : allège tes requètes avec ces deux astuces :
- Si tu ne t'adresses qu'à une seule table, il n'est pas nécessaire de répéter le nom de la table devant chaque champ.
- Comme tu utilises des noms de tables très long qui pénalisent la compréhension, utilise des alias pour le nom des tables, exemple :
Select t1.champ1, t2.champ2
  From TableAvecNomTresLong t1,
       EncoreUnNomTresLong  t2
 Where t1.champx = t2.champx

Avec ça, ton code respirera un peu et ça te facilitera le debugage.

Pour ta question, essaye de remplacer HAVING par WHERE (et en le plaçant entre le FROM et le GROUP BY)
   FROM  TableClassementChampionnatBelgique t1
   WHERE t1.NumeroJourneeChampionnat between 1 and 2 
GROUP BY t1.IdClub, t1.NumeroJourneeChampionnat
ORDER BY Sum(t1.TotalPointGeneral) DESC

PS : Evite aussi les niveaux de parenthèses inutiles

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
Rejoignez-nous