Adloun

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) :

Extraits des trois tables :

JoueurIDNomJ
2Alice
8Bob
7Charlie
  
TournoiIDNomTJoueurAIDJoueurBID
82TournoiDu12Dec28
59TournoiDu17Fev78
61TournoiDu29Mai82
MatchIDTournoiIDRoleJoueurAVainqueurID
11982Positus2
93482Minus8
92582Minus2
38461Positus2

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, gratuitement

Inscription gratuite en 30 secondes (e-mail, nom d'utilisateur, mot de passe, classe ou profil), sans carte bancaire : arrivée directe sur le corrigé.

Toutes les parties de l'épreuve

Corrigé complet gratuit →