This repository has been archived on 2024-04-18. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
DeezCycle/sql/script_vues.sql
2024-04-08 18:17:08 +02:00

84 lines
2.5 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- "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);