#Part 3: Joins and Groups

## What is each pokemon's primary type?
SELECT pok.name, t.name FROM pokemon.pokemons pok
JOIN pokemon.types t ON pok.primary_type = t.id;

## What is Rufflet's secondary type?
SELECT pok.name, t.name FROM pokemon.pokemons pok
JOIN pokemon.types t
        ON pok.secondary_type = t.id
WHERE pok.name = "Rufflet";

## What are the names of the pokemon that belong to the trainer with trainerID 303?
SELECT trainer.trainername AS "Trainer", GROUP_CONCAT(pok.name) AS "Pokemons"
FROM pokemon.pokemons pok
JOIN pokemon.pokemon_trainer pokTrainer
         ON pokTrainer.pokemon_id = pok.id
JOIN pokemon.trainers trainer
         ON pokTrainer.trainerID = trainer.trainerID
WHERE trainer.trainerID = 303
GROUP BY  trainer.trainername;

## How many pokemon have a secondary type Poison
SELECT COUNT(pok.secondary_type) AS "Poison Pokemons"
FROM pokemon.pokemons pok
JOIN pokemon.types types
          ON pok.secondary_type = types.id
WHERE types.name = "Poison";

## What are all the primary types and how many pokemon have that type?
SELECT type.name AS "Type", COUNT(pok.name) AS "Number of Pokemon"
FROM pokemon.types type
JOIN pokemon.pokemons pok
         ON pok.primary_type = type.id
GROUP BY type.name;

## How many pokemon at level 100 does each trainer with at least one level 100 pokemon have?
## (Hint: your query should not display a trainer
SELECT COUNT(trainer.pokemon_id) as "Pokemon at Level 100"
FROM pokemon.pokemon_trainer trainer
WHERE trainer.pokelevel = 100
GROUP BY trainer.trainerID;

## How many pokemon only belong to one trainer and no other?
SELECT COUNT(pokemon_id) AS "Pokemon with only one trainer"
FROM (SELECT DISTINCT pokemon_id, COUNT(pokemon_id)
FROM pokemon.pokemon_trainer
GROUP BY pokemon_id HAVING COUNT(DISTINCT trainerID) = 1)alias;
