les vues sql

This commit is contained in:
2024-04-08 18:17:08 +02:00
parent 7318ea0252
commit 6f254316b9

83
sql/script_vues.sql Normal file
View File

@@ -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 nest 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 dau 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);