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-12 15:05:22 +02:00

213 lines
3.9 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
);
-------------------------------------------------------------------
-- 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
);