Corrigé Mines-Ponts 2025 Informatique II MPI — Section 1.2 (Q12 à Q14) : Étude de tournois en SQL
Sujet officiel du concours Mines-Ponts, session 2025, épreuve Informatique II MPI. Corrigé rédigé par Ibrahim Alame.
Sujet officiel (PDF, site du concours)
Énoncé
Un tournoi oppose exactement deux joueurs, A et B, sur plusieurs matchs ; son vainqueur est le joueur qui a gagné le plus de matchs. Le rôle (Positus ou Minus) de chaque joueur peut changer d'un match à l'autre : la colonne RoleJoueurA donne celui du joueur A, le joueur B tenant l'autre rôle. Schéma (clés primaires soulignées) :
Joueurs(<u>JoueurID, NomJ) ;Tournois(<u>TournoiID, NomT, JoueurAID, JoueurBID) ;Matchs(<u>MatchID, TournoiID, RoleJoueurA, VainqueurID).
Extraits des trois tables :
| JoueurID | NomJ |
|---|---|
| 2 | Alice |
| 8 | Bob |
| 7 | Charlie |
| TournoiID | NomT | JoueurAID | JoueurBID |
|---|---|---|---|
| 82 | TournoiDu12Dec | 2 | 8 |
| 59 | TournoiDu17Fev | 7 | 8 |
| 61 | TournoiDu29Mai | 8 | 2 |
| MatchID | TournoiID | RoleJoueurA | VainqueurID |
|---|---|---|---|
| 119 | 82 | Positus | 2 |
| 934 | 82 | Minus | 8 |
| 925 | 82 | Minus | 2 |
| 384 | 61 | Positus | 2 |
Ainsi le tournoi du 12 décembre, entre Alice et Bob, s'est joué en trois matchs, dont Alice a gagné deux : elle l'a remporté.
Q12. Requête donnant le nombre de matchs joués dans chaque tournoi.
Q13. Requête donnant le nombre de tournois gagnés par chaque joueur.
Q14. Requête donnant le nombre de fois où chaque joueur a tenu le rôle de Positus.
Corrigé
Les trois requêtes ont été exécutées avec sqlite3 sur l'extrait du sujet, puis sur un jeu enrichi qui contient les cas limites : un joueur qui ne joue aucun match, un tournoi sans match, un tournoi à égalité ( victoire partout), un tournoi où le perdant n'a gagné aucun match.
Q12. On regroupe les matchs par tournoi et on compte chaque paquet :
SELECT T.TournoiID, COUNT(M.MatchID) AS NbMatchs
FROM Tournois AS T
LEFT JOIN Matchs AS M ON M.TournoiID = T.TournoiID
GROUP BY T.TournoiID;
Le regroupement se fait sur la clé primaire de Tournois. La jointure externe conserve les tournois sans aucun match, pour lesquels COUNT(M.MatchID) vaut (cette fonction ignore les NULL, alors que COUNT(*) compterait la ligne complétée et rendrait ). Sur l'extrait : , et . Si l'on ne veut que les tournois effectivement joués, la requête se réduit à SELECT TournoiID, COUNT(*) FROM Matchs GROUP BY TournoiID;, qui ne renvoie pas le tournoi .
100 % gratuit
La suite du corrigé est sur Adloun
Le corrigé rédigé en entier, question par question, et le tuteur pour poser des questions sur ce sujet.
Voir le corrigé complet, gratuitementInscription gratuite en 30 secondes (e-mail, nom d'utilisateur, mot de passe, classe ou profil), sans carte bancaire : arrivée directe sur le corrigé.