diff --git a/sql/script_vues.sql b/sql/script_vues.sql index 2abbc5e..b312a1f 100644 --- a/sql/script_vues.sql +++ b/sql/script_vues.sql @@ -1,83 +1,213 @@ -- "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; - - - - +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); - - - +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); - - - - +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); - - - - +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); - - - - +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_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); +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 + ); \ No newline at end of file