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