---
# System prepended metadata

title: Exercício 7 e 8 - Backend

---

# Exercício 7 e 8 - Backend #

###### Array, Like, Split Part, Date Part, 

1. Quais gêneros distintos existem? A resposta deve ordernar pela quantidade decrescente e mostrar a quantidade de itens por gênero.

```sql=
select
	distinct n.listed_in,
	count(n.show_id)
from netflix n
group by n.listed_in 
order by
	count(n.show_id) desc
```

2. Para os filmes, qual é a media de duração listando-os por gênero e ordenado-os pela duração de maneira decrescente? Dica: Utilize a função SPLIT_PART. 
```sql=
select
	distinct n.listed_in,
	AVG(cast(split_part(n.duration, ' ', 1) as float))
from netflix n
group by n.listed_in 
order by AVG(cast(split_part(n.duration, ' ',1 ) as float)) desc
```

3. Quais os gêneros listados que possuem maior quantidade de séries agrupados por ano de lançamento. Orderne-os pela quantidade de maneira decrescente.
```sql=
select n.release_year,
	n.listed_in,
	count(n.show_id)
from netflix n
where n."type" = 'TV Show'
group by n.release_year, n.listed_in 
order by count(n.show_id) desc 
```

4. Quantas produções não foram lançadas no mesmo ano de produção? Dica: Utilize a função date_part.
```sql=
select count(n.show_id)
from netflix n
where n.release_year <> date_part('year', n.date_added) 
```

5. Quais são os cinco países mais produtores de séries sem considerar os Estados Unidos?
```sql=
select n.country, n."type", count(n.show_id)
from netflix n
where n.country not like '%United States%'
	and n."type" = 'TV Show'
group by n.country, n."type"
order by count(n.show_id) desc 
limit 5
```

6. Por listagem de gênero, quantas produções existem que são classificadas para jovens de 17 anos ou apenas adultos? Ordene-as decrescentemente.
```sql=
select n.listed_in , n.rating, count(n.show_id)
from netflix n
where n.rating = 'R'
	or n.rating = 'NC-17'
group by n.listed_in , n.rating
order by count(n.show_id) desc 
```

7. Obtenha todas as produções que tiveram Antonio Banderas como principal ator (primeiro ator da listagem). Qual é a quantidade de produções? Dica: Utiliza a cláusula LIKE
```sql=
select n.title, n.casting
from netflix n
where split_part(n.casting, ', ', 1) like '%Antonio Banderas%' 
group by n.title, n.casting;

select count(n.show_id )
from netflix n
where split_part(n.casting, ', ', 1) like '%Antonio Banderas%';
```

8. Busque pela listagem de todos os atores. Dica: Existe a função string_to_array que transforma uma string (um texto) em uma lista (array) e a função que transforma uma lista (array) em uma coluna. 
```sql=
select distinct unnest(string_to_array(n.casting, ', ')) 
from netflix n
order by unnest(string_to_array(n.casting, ', ')) asc
```

9. Busque por todos os filmes que sejam da franquia Transformers, Star Wars, Harry Potter ou Lord of the Rings. Dica: utilize a cláusula LIKE
```sql=
select n.show_id, n."type", n.title 
from netflix n
where n.title like '%Transformers%'
	or n.title like '%Harry Potter%'
	or n.title like '%Star Wars%'
	or n.title like '%Lord of the Rings%'
group by n.show_id, n."type", n.title 
```

10. Quantas séries ou filmes envolvem alguma descrição com a palavra distópica (dystopian) ou zumbi (zombie)? A resposta deve conter a quantidade de filmes e series em grupos separados;
```sql=
select distinct n."type", count(n.show_id) 
from netflix n
where n.description like '%dystopian%'
	or n.description like '%zombie%'
group by n."type"
```

11. Busque os anos de lançamento das 5 series com lançamento mais antigo e que não tenham sido produzidas nos Estados Unidos (primeira posição no campo de países) nem que o Reino Unido (United Kingdom) tenha participação.
```sql=
select n.release_year 
from netflix n
where n.country not like 'United States%'
	and n.country not like '%United Kingdom%'
	and n."type" = 'TV Show'
order by n.release_year asc
limit 5
```

12. Quais as durações e a quantidade de filmes que se enquadram nos seguintes critérios:
- Foi adicionado na plataforma entre 2015 e 2017;
- É listado de alguma forma como documentário (Documentaries);
- Possui duração entre 90 e 100 minutos;
- A resposta deve conter a duração e a quantidade de produção para cada duração;
- Ordernar pela quantidade decrescentemente;
```sql=
select n.duration, count(n.show_id)
from netflix n
where date_part('year', n.date_added) between 2015 and 2017
	and cast(split_part(n.duration, ' ', 1) as integer) between 90 and 100 
	and n.listed_in ilike '%DoCuMeNtArIeS%' 
group by n.duration
order by count(n.show_id) desc
```

13. Entre os países produtores de Ficção Científica e Fantasia (Sci-Fi & Fantasy) busque aqueles que:
- não sejam os 10 maiores produtores
- não sejam de nenhuma forma vinculados aos Estados Unidos. (nenhuma produção de ficção científica e fantasia junto a eles)
- Sua resposta deve conter apenas 5 países com a quantidade de produção;
```sql=
select unnest (string_to_array(n.country, ', ')), count(n.show_id)
from netflix n
where n.listed_in ilike '%Sci-Fi & Fantasy%'
	and n.country not ilike '%United states%'
group by n.country
order by count(n.show_id) desc
limit 5
offset 10
```

14. "Brazil" só produz conteúdo de comédia ou violento/de ação? Qual a relação da quantidade produzida geral pelo Brasil e com conteúdos que não são desses nichos? (A resposta pode estar em consultas separadas)
```sql=
select count(n.show_id)
from netflix n
where n.country ilike '%Brazil%'
	and (n.listed_in not ilike '%comed%'
	and  n.listed_in not ilike '%action%');
    
select count(n.show_id)
from netflix n
where n.country ilike '%Brazil%'
```

15. Faça uma consulta que respeite as seguintes condições:
- Cinco maiores produtores de conteúdo de música (Music & Musicals)
- Não tenha participação de Estados Unidos, nem Reino Unido, nem Índia;
- Possua as informações de listagem de gênero, os países que participam dessas produções (um ou mais) e a quantidade de produções;
- Cada item pode ter mais de um país;
```sql=
select n.listed_in, n.country , count(n.show_id)
from netflix n
where n.listed_in ilike '%Music & Musicals%'
	and n.country not ilike '%united states%'
	and n.country not ilike '%india%'
	and n.country not ilike '%kingdom'
group by n.listed_in, n.country
order by count(n.show_id) desc 
limit 5
```