diff --git a/sql/script_vues.sql b/sql/script_vues.sql new file mode 100644 index 0000000..2abbc5e --- /dev/null +++ b/sql/script_vues.sql @@ -0,0 +1,83 @@ +-- "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);