START TRANSACTION; -- "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". CREATE VIEW stat_globales AS 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; -- "le nombre d’équipes classées premières des classements et dont aucun des membres n’est premier dans -- un classement individuel". CREATE VIEW equipes_top_1 AS ( SELECT idequipe FROM classement_equipe WHERE rang = 1 ); CREATE VIEW equipes_avec_bon_joueur AS ( SELECT DISTINCT idequipe FROM classement_individuel JOIN joueur USING (idjoueur) WHERE rang = 1 ); -- "Pour les 3 dernières années, donner le nombre moyen de participants aux tournois". CREATE VIEW participants_tournois_recents AS ( SELECT idtournoi, COUNT(idtournoi) AS nb FROM participe JOIN tournoi USING (idtournoi) WHERE YEAR (date_deb) >= (YEAR(NOW()) - 3) GROUP BY idtournoi ); -- "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". CREATE VIEW joueurs_au_moins_deux_top_5 AS ( 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". CREATE VIEW tailles_plateaux AS ( 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" CREATE VIEW top_joueurs_parties_jouees AS ( SELECT pseudo, COUNT(idPartie) AS nb_parties FROM joueur JOIN joue USING (idjoueur) GROUP BY idjoueur ORDER BY nb_parties DESC ); CREATE VIEW top_5_joueurs_parties_jouees AS ( SELECT * FROM top_joueurs_parties_jouees LIMIT 5 ); ------------------------------------------------------------------- -- Fonctionalités afficherParties -- Afficher les parties dans l'état "a venir" CREATE VIEW parties_a_venir AS ( SELECT * FROM partie WHERE etat = "a venir" ); -- Afficher les parties dans l'état "en cours" CREATE VIEW parties_en_cours AS ( SELECT * FROM partie WHERE etat = "en cours" ); -- Afficher les parties dans l'état "terminee" CREATE VIEW parties_terminees AS ( SELECT * FROM partie WHERE etat = "terminee" ); -- Afficher les parties dans l'état "terminee" -- les 50 parties les plus récentes (avec un tri de la plus récente à la plus ancienne) CREATE VIEW parties_terminees_recentes AS ( SELECT * FROM partie WHERE etat = "terminee" ORDER BY date_partie ASC LIMIT 50 ); -- Afficher les parties dans l'état "terminee" -- Les 50 parties plus rapides par taille de plateau" -- (avec un tri par nombre de cartes décroissant puis, pour les parties avec un plateau de même taille, -- de la plus rapide à la plus lente) CREATE VIEW parties_terminees_rapides AS ( SELECT * FROM partie pa JOIN plateau pl USING (idplateau) WHERE etat = "terminee" ORDER BY pl.taille ASC, duree ASC LIMIT 50 ); -- Affiche le nombre de carte par couleur dans le jeu CREATE VIEW cartes_jeu AS ( SELECT niveau as couleur, COUNT(idcarte) as nombre FROM carte GROUP BY niveau ORDER BY couleur ); COMMIT;