Update SQL views
This commit is contained in:
@@ -1,83 +1,213 @@
|
|||||||
-- "un n-uplet contenant le nombre de joueurs, le nombre d’équipes, le nombre de classements, le nombre de
|
-- "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".
|
-- tournois et la moyenne des participants par tournoi".
|
||||||
CREATE VIEW stat_globales AS SELECT (
|
CREATE VIEW
|
||||||
SELECT COUNT(*) FROM joueur
|
stat_globales AS
|
||||||
) AS nb_joueurs,
|
SELECT
|
||||||
(
|
(
|
||||||
SELECT COUNT(*) FROM equipe
|
SELECT
|
||||||
) AS nb_equipes,
|
COUNT(*)
|
||||||
(
|
FROM
|
||||||
SELECT COUNT(*) FROM classement
|
joueur
|
||||||
) AS nb_classements,
|
) AS nb_joueurs,
|
||||||
(
|
(
|
||||||
SELECT COUNT(*) FROM tournoi
|
SELECT
|
||||||
) AS nb_tournois,
|
COUNT(*)
|
||||||
(
|
FROM
|
||||||
WITH participants_tournois AS
|
equipe
|
||||||
(SELECT idtournoi, COUNT(idtournoi) AS nb FROM participe GROUP BY idtournoi)
|
) AS nb_equipes,
|
||||||
SELECT AVG(nb) AS average FROM participants_tournois
|
(
|
||||||
) AS moyenne_participants;
|
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
|
-- "le nombre d’équipes classées premières des classements et dont aucun des membres n’est premier dans
|
||||||
-- un classement individuel".
|
-- un classement individuel".
|
||||||
CREATE VIEW equipes_top_1 AS
|
CREATE VIEW
|
||||||
(SELECT idequipe FROM classement_equipe WHERE rang = 1);
|
equipes_top_1 AS (
|
||||||
|
SELECT
|
||||||
CREATE VIEW equipes_avec_bon_joueur AS
|
idequipe
|
||||||
(SELECT DISTINCT idequipe FROM classement_individuel JOIN joueur USING(idjoueur) WHERE rang = 1);
|
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".
|
-- "Pour les 3 dernières années, donner le nombre moyen de participants aux tournois".
|
||||||
CREATE VIEW participants_tournois_recents AS
|
CREATE VIEW
|
||||||
(SELECT idtournoi, COUNT(idtournoi) AS nb
|
participants_tournois_recents AS (
|
||||||
FROM participe
|
SELECT
|
||||||
JOIN tournoi USING(idtournoi)
|
idtournoi,
|
||||||
WHERE YEAR(date_deb) >= (YEAR(NOW()) - 3)
|
COUNT(idtournoi) AS nb
|
||||||
GROUP BY idtournoi);
|
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
|
-- "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".
|
-- classements de portée nationale".
|
||||||
CREATE VIEW joueurs_au_moins_deux_top_5 AS
|
CREATE VIEW
|
||||||
(SELECT DISTINCT J.nom, J.prenom FROM joueur J
|
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 CI1 ON J.idjoueur = CI1.idjoueur
|
||||||
JOIN classement_individuel CI2 ON J.idjoueur = CI2.idjoueur
|
JOIN classement_individuel CI2 ON J.idjoueur = CI2.idjoueur
|
||||||
JOIN classement C1 ON C1.idclassement = CI1.idclassement
|
JOIN classement C1 ON C1.idclassement = CI1.idclassement
|
||||||
JOIN classement C2 ON C2.idclassement = CI2.idclassement
|
JOIN classement C2 ON C2.idclassement = CI2.idclassement
|
||||||
WHERE CI1.rang >= 5 AND CI2.rang >= 5
|
WHERE
|
||||||
AND C1.portee = "nationale" AND C2.portee = "nationale"
|
CI1.rang >= 5
|
||||||
AND CI1.idclassement < CI2.idclassement);
|
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".
|
-- "Pour chaque taille de plateau, donner le nombre de parties jouées avec un plateau de cette taille".
|
||||||
CREATE VIEW tailles_plateaux AS
|
CREATE VIEW
|
||||||
(SELECT taille, COUNT(idpartie) AS nb_parties
|
tailles_plateaux AS (
|
||||||
FROM plateau JOIN partie USING(idplateau)
|
SELECT
|
||||||
GROUP BY taille);
|
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"
|
-- "Le top 5 des joueurs (pseudo) qui ont joué le plus de parties"
|
||||||
CREATE VIEW top_joueurs_parties_jouees AS
|
CREATE VIEW
|
||||||
(SELECT pseudo, COUNT(idPartie) AS nb_parties
|
top_joueurs_parties_jouees AS (
|
||||||
FROM joueur JOIN joue USING(idjoueur)
|
SELECT
|
||||||
GROUP BY idjoueur
|
pseudo,
|
||||||
ORDER BY nb_parties DESC);
|
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
|
CREATE VIEW
|
||||||
(SELECT * FROM top_joueurs_parties_jouees LIMIT 5);
|
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
|
||||||
|
);
|
||||||
Reference in New Issue
Block a user