Requête pour récupérer le classement d'un championnat [Résolu] [SQL] - SQL/NoSQL - Programmation
Marsh Posté le 16-05-2006 à 22:07:01
tu utilise une base Access? oracle? mysql? autres?
tu veux une requete pour une page web ou mettre à jour ta base?
Marsh Posté le 16-05-2006 à 22:27:19
Y a sans doute mieux mais entre 2 scenes de matrix on fait ce qu'on peut 
 
SELECT SUM(t.points) Total, equipe from  
( 
SELECT  equipe_domicile equipe, 
 SUM (CASE  
 WHEN score_domicile > score_exterieur THEN 3 
 WHEN score_domicile = score_exterieur THEN 1 
 WHEN score_domicile < score_exterieur THEN 0 
 END) points 
FROM MATCH 
GROUP BY equipe_domicile 
 
UNION 
 
SELECT  equipe_exterieur equipe, 
 SUM (CASE  
 WHEN score_exterieur > score_domicile THEN 3 
 WHEN score_exterieur = score_domicile THEN 1 
 WHEN score_exterieur < score_domicile THEN 0 
 END) points 
FROM MATCH 
GROUP BY equipe_exterieur 
 
) t 
group by equipe  
order by Total DESC 
 
 
ps: testé en transact sql
Marsh Posté le 17-05-2006 à 01:41:15
Merci Adelscott ! 
 
denischti, c'est pour une base mysql et une page web. 
 
J'ai bidouillé et "tuné" un peu ta requête Adelscott pour avoir quelque chose de très complet, et ça marche niquel : 
 
SELECT equipe AS equipe_id, equipe.nom AS equipe_nom, SUM(t.matchs_joues) AS matchs_joues, SUM(t.matchs_gagnes) AS victoires, SUM(t.matchs_nuls) AS nuls, SUM(t.matchs_perdus) AS defaites, SUM(t.matchs_points) AS points FROM 
( 
 SELECT 
 	equipe_domicile AS equipe, 
 	SUM(CASE 
   WHEN score_domicile IS NOT NULL THEN 1 ELSE 0 
 	END) AS matchs_joues, 
 	SUM(CASE 
   WHEN score_domicile > score_exterieur THEN 3 
   WHEN score_domicile = score_exterieur THEN 1 
   WHEN score_domicile < score_exterieur THEN 0 ELSE 0 
 	END) AS matchs_points, 
 	SUM(CASE 
   WHEN score_domicile > score_exterieur THEN 1 ELSE 0 
 	END) AS matchs_gagnes, 
 	SUM(CASE 
   WHEN score_domicile = score_exterieur THEN 1 ELSE 0 
 	END) AS matchs_nuls, 
 	SUM(CASE 
   WHEN score_domicile < score_exterieur THEN 1 ELSE 0 
 	END) AS matchs_perdus 
 FROM matche 
 GROUP BY equipe 
UNION 
 SELECT 
 	equipe_exterieur AS equipe, 
 	SUM(CASE 
   WHEN score_exterieur IS NOT NULL THEN 1 ELSE 0 
 	END) AS matchs_joues, 
 	SUM(CASE 
   WHEN score_exterieur > score_domicile THEN 3 
   WHEN score_exterieur = score_domicile THEN 1 
   WHEN score_exterieur < score_domicile THEN 0 ELSE 0 
 	END) AS matchs_points, 
 	SUM(CASE 
   WHEN score_exterieur > score_domicile THEN 1 ELSE 0 
 	END) AS matchs_gagnes, 
 	SUM(CASE 
   WHEN score_exterieur = score_domicile THEN 1 ELSE 0 
 	END) AS matchs_nuls, 
 	SUM(CASE 
   WHEN score_exterieur < score_domicile THEN 1 ELSE 0 
 	END) AS matchs_perdus 
 FROM matche 
 GROUP BY equipe 
) AS t, equipe WHERE t.equipe = equipe.id GROUP BY equipe ORDER BY points DESC, equipe_nom ASC 
 
Ca me renvoie un tableau avec ID équipe, nom équipe, nbr. de matchs joués, nbr. de victoires, nuls et défaites et nbr. de points. 
Bon, il me restera également à intégrer le goal average... Ca va pas être simple non plus ça  
 
 
En tout cas encore merci !
Marsh Posté le 20-05-2006 à 02:48:12
Avec goal average 
 
SELECT SUM(t.points) Total, SUM(diff) diff, equipe from   
(  
SELECT  equipe_domicile equipe,  
 SUM (CASE   
 WHEN score_domicile > score_exterieur THEN 3  
 WHEN score_domicile = score_exterieur THEN 1  
 WHEN score_domicile < score_exterieur THEN 0  
 END) points,  
SUM (score_domicile - score_exterieur) as diff 
FROM MATCH  
GROUP BY equipe_domicile 
  
UNION  
  
SELECT  equipe_exterieur equipe,  
 SUM (CASE   
 WHEN score_exterieur > score_domicile THEN 3  
 WHEN score_exterieur = score_domicile THEN 1  
 WHEN score_exterieur < score_domicile THEN 0  
 END) points,  
SUM (score_exterieur - score_domicile) as diff 
FROM MATCH  
GROUP BY equipe_exterieur 
  
) t  
group by equipe   
order by Total DESC, diff DESC
Marsh Posté le 28-10-2006 à 17:59:46
Comme demandé, une adaptation pour avoir le classement d'une equipe au fil des journées 
 
Ce n'est pas tres beau mais ca fonctionne. 
| Code : 
 | 
Marsh Posté le 16-05-2006 à 17:12:00
Bonjour à tous,
je développe actuellement un site sur le championnat football de L1. Mon problème pour le moment est la récupération du classement du championnat, que j'essaie d'effectuer uniquement sur ma table "match" qui recense tous les matchs.
Voici la structure de cette table :
- id
- championnat (ID du championnat)
- saison (ID de la saison)
- journee (N° de la journée)
- equipe_domicile (ID de l'équipe jouant à domicile)
- equipe_exterieur (ID de l'équipe jouant à l'extérieur)
- score_domicile (score de l'équipe jouant à domicile)
- score_exterieur (score de l'équipe jouant à l'extérieur)
- date
Il faut donc, pour une saison et un championnat donné, que je sorte un tableau comprenant le nombre de points cumulés de chaque équipe, sachant que lorsque :
- score_domicile > score_exterieur alors equipe_domicile a +3 points ;
- score_domicile == score_exterieur alors equipe_domicile a +1 point et equipe_exterieur a +1 point ;
- score_domicile < score_exterieur alors equipe_exterieur a +3 points ;
- si score_domicile et score_exterieur sont NULL, le match ne s'est pas encore déroulé.
Je ne sais pas du tout par quoi commencer, je ne suis même pas sûr que ce que je souhaite soit possible en une seule requête ?!
Merci pour votre aide !!!
Message édité par f L Y le 17-05-2006 à 01:42:17