95 lines
2.9 KiB
SQL
95 lines
2.9 KiB
SQL
-- "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 s’est qualifié
|
||
-- l’utilisateur courant. Le résultat sera trié sur les années selon l’ordre antéchronologique puis sur les niveaux
|
||
-- de phase selon l’ordre 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 n’est 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 d’au 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)
|
||
|
||
SELECT pseudo FROM top_players LIMIT 5;
|