--1. On veut obtenir le pseudonyme, le sexe, le niveau et le nombre de Pokémons de tous les joueurs, y compris ceux qui n'ont capturé aucun Pokémon. Triez votre résultat. 
SELECT pseudonyme, sexe, niveau, COUNT(p.id)
FROM Joueur j LEFT JOIN Pokemon p ON idJoueur = pseudonyme
GROUP BY pseudonyme,sexe, niveau
ORDER BY COUNT(p.id) DESC;
--2. Classez les Pokémons en fonction de nombre d'apparitions. Nous sommes intéressés aux Pokémons qui n'ont pas encore apparu également (dont le nombre d'apparition vaut 0).
SELECT nom, COUNT(idPokemon)
FROM Pokemon p LEFT JOIN Apparition a ON p.id = idPokemon
GROUP BY p.id, nom
ORDER BY COUNT(idPokemon) DESC;
--3. Quels sont les Pokémons dont le nombre d'apparitions est supérieur au nombre moyen d'apparitions ?
SELECT nom
FROM Pokemon p LEFT JOIN Apparition a ON p.id = idPokemon
GROUP BY p.id, nom
HAVING COUNT(idPokemon) > (SELECT AVG(COUNT(idPokemon))
FROM Pokemon p LEFT JOIN Apparition a ON p.id = idPokemon
GROUP BY p.id, nom);
--4. Quels sont les Pokémons qui ont apparu dans tous les emplacements différents ?
SELECT nom
FROM Pokemon p, Apparition a 
WHERE p.id = idPokemon
GROUP BY p.id, nom
HAVING COUNT(DISTINCT idEmplacement) = (SELECT COUNT(*) FROM Emplacement);
--5. Quels sont les joueurs qui ont capturé toutes les espèces de Pokémon ?
SELECT pseudonyme
FROM Joueur j, Pokemon p 
WHERE idJoueur = pseudonyme
GROUP BY pseudonyme
HAVING COUNT(DISTINCT espece) = (SELECT COUNT(DISTINCT espece) FROM Pokemon);
--6. Combien de joueurs possèdent des Pokémons qui sont placés dans l'emplacement avec la latitude la plus septentrionale (la plus haute) ?
SELECT COUNT(pseudonyme)
FROM joueur j, pokemon p, apparition a, emplacement e
WHERE pseudonyme = idJoueur
AND p.id = idPokemon
AND idEmplacement = e.id
AND latitude = (SELECT MAX(latitude) FROM emplacement);
--7. Quelle est l'équipe qui a pris le contrôle d'une arène le plus souvent ?
SELECT nom
FROM equipe e, defense d
WHERE e.id = idEquipe
GROUP BY e.id, nom 
HAVING COUNT(idArene) = (SELECT MAX(COUNT(idArene)) FROM Defense GROUP BY idEquipe);
--8. Quelle est la plage des dates auxquelles les Pokémons de l'équipe de la question précédente ont apparu ?
SELECT MIN(horaire), MAX(horaire)
FROM apparition a, pokemon p, joueur j, equipe e
WHERE idPokemon = p.id
AND idJoueur = pseudonyme
AND idEquipe = e.id
AND e.nom = (
SELECT nom
FROM equipe e, defense d
WHERE e.id = idEquipe
GROUP BY e.id, nom 
HAVING COUNT(idArene) = (SELECT MAX(COUNT(idArene)) FROM Defense GROUP BY idEquipe));
