2021-11-05

Resumo da última aula

Sintaxe Básica

  • SELECT (seleciona as colunas)
  • FROM (seleciona as tabelas)
  • JOIN (faz a junção entre tabelas)
  • USING (determina a chave primária e estrangeira)
  • WHERE (estabelece condições)
  • GROUP BY (agrupa por um atributo, quando há agregação)
  • ORDER BY (DESC OU ASC) (ordena os resultados)
  • AS (renomeia as colunas ou tabelas)

Condições

  • = (igual)
  • e < (maior, menor)

  • = e <= (maior igual, menor igual)

  • != (diferente)
  • LIKE e ILIKE (parecido)
  • ‘%’ (cadeia de caracteres)

Funções de Agregação

  • SUM (soma)
  • AVG (média)
  • MIN (mínimo)
  • MAX (máximo)

BD COVID

Modelo Conceitual

Modelo Lógico

  • cv_cases (date, week, cases, new_cases, deaths, new_deaths, cod_mun)

    cod_mum referencia municipios

  • municipios (cod_mun, leitos, pop, renda, leitos_sus_reg, geom, cod_uf)

    cod_uf referencia uf

  • uf (cod_uf, geom)

Modelo Lógico

Mortes/Casos (new_deaths/new_cases)

Novas Mortes/Casos (new_deaths/new_cases)

Quantas mortes estão registradas no BD?

Quantas mortes estão registradas no BD?

select sum(new_deaths) 
from cv_cases;
sum
585189

Quantas mortes e casos estão registradas no BD?

Quantas mortes e casos estão registradas no BD?

select sum(new_cases) as casos, sum(new_deaths) as mortes
from cv_cases;
casos mortes
20761456 585189

Quantas mortes e casos por estado, ordenando por mortes?

Quantas mortes e casos por estado, ordenando por mortes?

select state, sum(new_cases) as casos, sum(new_deaths) as mortes
from cv_cases
group by state
order by mortes desc;
state casos mortes
SP 4315696 148120
RJ 1260927 64439
MG 2094924 52481
PR 1512242 38631
RS 1386571 36043
BA 1214374 26609

Mortes por UF do SUL

Quantas mortes por semana no Brasil?

Quantas mortes por semana no Brasil?

select date, sum(new_deaths) as mortes
from cv_cases
group by date
order by date desc;
date mortes
2021-10-31 500
2021-10-24 1116
2021-10-17 1750
2021-10-10 1302
2021-10-03 4315
2021-09-26 2254

Quantas mortes por semana no Brasil?

Quantas mortes por semana no RS?

select date, sum(new_deaths) as mortes
from cv_cases
where state='RS'
group by date
order by date desc;
date mortes
2021-10-31 6
2021-10-24 145
2021-10-17 110
2021-10-10 134
2021-10-03 167
2021-09-26 151

Quantas mortes por semana no RS?

Join

Qual é o número de mortos por 100k habitantes em cada município em cada semana?

  • Não existe a informação de população…
    cod_mun state week weekd year date cases deaths new_cases new_deaths id
    4300034 RS 8 7 2021 2021-02-28 72 0 4 0 409514
    4300059 RS 8 7 2021 2021-02-28 307 7 14 0 409515
    4300109 RS 8 7 2021 2021-02-28 563 4 62 0 409516
    4300208 RS 8 7 2021 2021-02-28 528 5 2 1 409517
  • O que fazer?

De volta ao modelo lógico…

Qual é o número de mortos por 100k habitantes em cada município em cada semana?

SELECT nome_mun, date, deaths as mortes, pop as população, 
deaths*100000/pop as taxa
FROM cv_cases c JOIN municipios m
using (cod_mun);
nome_mun date mortes população taxa
RIO GRANDE 2021-10-31 563 195768 287.5853
RIO GRANDE 2021-10-24 563 195768 287.5853
RIO GRANDE 2021-09-26 562 195768 287.0745
RIO GRANDE 2021-10-03 562 195768 287.0745
RIO GRANDE 2021-09-19 561 195768 286.5637
RIO GRANDE 2021-10-17 560 195768 286.0529
RIO GRANDE 2021-09-12 559 195768 285.5421
RIO GRANDE 2021-10-10 559 195768 285.5421
RIO GRANDE 2021-09-05 558 195768 285.0313
RIO GRANDE 2021-08-29 555 195768 283.4988

Mapa de número de mortos por 100k

  • st_makepoint
SELECT nome_mun, date, deaths as mortes, pop as população, geometry,
deaths*100000/pop as taxa
FROM cv_cases c JOIN municipios m
using (cod_mun);

Mapas ao longo do tempo

Time Manager Plugin

Subconsultas em SQL

Qual é o número de mortos por 100k de habitantes no Brasil?

  • Isto está correto?
select sum(new_deaths) as mortes, sum (pop) as população, 
sum(new_deaths)*100000/sum(pop) as taxa_mortalidade
from cv_cases join municipios using (cod_mun);
mortes população taxa_mortalidade
584997 15832688049 3.694869

Qual é o número de mortos por 100k de habitantes no Brasil?

  • É necessário usar as mortes cumulativas, apenas para a última data disponível
select sum(deaths) as mortes, sum (pop) as população, 
sum(deaths)*100000/sum(pop) as taxa_mortalidade
from cv_cases join municipios using (cod_mun)
where date='2021-10-31';
mortes população taxa_mortalidade
599051 189766483 315.678

Qual é o número de mortos por 100k de habitantes no Brasil?

  • Ou fazer uma subconsulta
select 
  (select sum(new_deaths) as mortes from cv_cases) as mortes, 
  (select sum (pop) as população from municipios) as pop,
  (select sum(new_deaths) as mortes from cv_cases)*100000/
  (select sum (pop) as população from municipios);
mortes população taxa_mortalidade
599051 189766483 315.678

Confirmando o cálculo anterior

Obrigado!