230 lines
4.2 KiB
SQL
230 lines
4.2 KiB
SQL
START TRANSACTION;
|
||
-- "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
|
||
);
|
||
|
||
-------------------------------------------------------------------
|
||
-- 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
|
||
);
|
||
|
||
-- Affiche le nombre de carte par couleur dans le jeu
|
||
CREATE VIEW
|
||
cartes_jeu AS (
|
||
SELECT
|
||
niveau as couleur,
|
||
COUNT(idcarte) as nombre
|
||
FROM
|
||
carte
|
||
GROUP BY
|
||
niveau
|
||
ORDER BY
|
||
couleur
|
||
);
|
||
|
||
COMMIT; |