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_requete.sql

95 lines
2.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".
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;
-- "les phases de tournoi (nom et année de tournoi, niveau de phase) jouées et pour lesquelles sest qualifié
-- lutilisateur courant. Le résultat sera trié sur les années selon lordre antéchronologique puis sur les niveaux
-- de phase selon lordre lexicographique inverse".
SELECT T.nom, YEAR(T.date_deb), niveau
FROM participe Pa
JOIN phase Ph USING(idtournoi, niveau)
JOIN tournoi T USING(idtournoi)
WHERE Pa.idjoueur = ? AND Pa.est_qualifie AND Pa.a_joue
ORDER BY T.date_deb DESC, Ph.niveau DESC;
--"le nombre déquipes classées premières des classements et dont aucun des membres nest premier dans
-- un classement individuel".
WITH equipes_top_1 AS
(SELECT idequipe FROM classement_equipe WHERE rang = 1)
, equipes_avec_bon_joueur AS
(SELECT DISTINCT idequipe FROM classement_individuel JOIN joueur USING(idjoueur) WHERE rang = 1)
SELECT COUNT(*) AS nb_equipes FROM equipes_top_1 ET1 WHERE NOT EXISTS (SELECT * FROM equipes_avec_bon_joueur EBJ WHERE ET1.idequipe = EBJ.idequipe);
-- "Pour les 3 dernières années, donner le nombre moyen de participants aux tournois".
WITH participants_tournois AS
(SELECT idtournoi, COUNT(idtournoi) AS nb
FROM participe
JOIN tournoi (idtournoi)
AND YEAR(T.date_deb) >= (YEAR(NOW()) - 3)
GROUP BY idtournoi)
SELECT AVG(nb) AS average FROM participants_tournois;
-- "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".
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".
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"
WITH top_players AS
(SELECT pseudo, COUNT(idPartie) AS nb_parties FROM joueur JOIN joue USING(idjoueur) GROUP BY idjoueur ORDER BY nb_parties DESC)
SELECT pseudo FROM top_players LIMIT 5;