-- "un n-uplet contenant le nombre de joueurs, le nombre d’équipes, le nombre de classements, le nombre de -- tournois et la moyenne des participants par tournoi". SELECT ( SELECT COUNT(*) FROM joueur ) AS nb_joueurs, ( SELECT COUNT(*) FROM equipe ) AS nb_equipes, ( SELECT COUNT(*) FROM classement ) AS nb_classements, ( SELECT COUNT(*) FROM tournoi ) AS nb_tournois, ( WITH participants_tournois AS (SELECT idtournoi, COUNT(idtournoi) AS nb FROM participe GROUP BY idtournoi) SELECT AVG(nb) AS average FROM participants_tournois ) AS moyenne_participants; -- "les phases de tournoi (nom et année de tournoi, niveau de phase) jouées et pour lesquelles s’est qualifié -- l’utilisateur courant. Le résultat sera trié sur les années selon l’ordre antéchronologique puis sur les niveaux -- de phase selon l’ordre lexicographique inverse". SELECT T.nom, YEAR(T.date_deb), niveau FROM participe Pa JOIN phase Ph USING(idtournoi, niveau) JOIN tournoi T USING(idtournoi) WHERE Pa.idjoueur = ? AND Pa.est_qualifie AND Pa.a_joue ORDER BY T.date_deb DESC, Ph.niveau DESC; --"le nombre d’équipes classées premières des classements et dont aucun des membres n’est premier dans -- un classement individuel". WITH equipes_top_1 AS (SELECT idequipe FROM classement_equipe WHERE rang = 1) , equipes_avec_bon_joueur AS (SELECT DISTINCT idequipe FROM classement_individuel JOIN joueur USING(idjoueur) WHERE rang = 1) SELECT COUNT(*) AS nb_equipes FROM equipes_top_1 ET1 WHERE NOT EXISTS (SELECT * FROM equipes_avec_bon_joueur EBJ WHERE ET1.idequipe = EBJ.idequipe); -- "Pour les 3 dernières années, donner le nombre moyen de participants aux tournois". WITH participants_tournois AS (SELECT idtournoi, COUNT(idtournoi) AS nb FROM participe JOIN tournoi USING(idtournoi) WHERE YEAR(date_deb) >= (YEAR(NOW()) - 3) GROUP BY idtournoi) SELECT AVG(nb) AS average FROM participants_tournois -- "Donner le nom et le prénom des joueurs classés de manière individuelle dans le top 5 d’au moins 2 -- classements de portée nationale". SELECT DISTINCT J.nom, J.prenom FROM joueur J JOIN classement_individuel CI1 ON J.idjoueur = CI1.idjoueur JOIN classement_individuel CI2 ON J.idjoueur = CI2.idjoueur JOIN classement C1 ON C1.idclassement = CI1.idclassement JOIN classement C2 ON C2.idclassement = CI2.idclassement WHERE CI1.rang >= 5 AND CI2.rang >= 5 AND C1.portee = "nationale" AND C2.portee = "nationale" AND CI1.idclassement < CI2.idclassement; -- "Pour chaque taille de plateau, donner le nombre de parties jouées avec un plateau de cette taille". SELECT taille, COUNT(idpartie) AS nb_parties FROM plateau JOIN partie USING(idplateau) GROUP BY taille; -- "Le top 5 des joueurs (pseudo) qui ont joué le plus de parties" WITH top_players AS (SELECT pseudo, COUNT(idPartie) AS nb_parties FROM joueur JOIN joue USING(idjoueur) GROUP BY idjoueur ORDER BY nb_parties DESC) SELECT pseudo FROM top_players LIMIT 5;