SQL e DadosTrilha · etapa 99 min
HAVING e DISTINCT com GROUP BY
Vídeos desta etapa, na ordem do portal:
- Filtrando e Refinando Resultados com HAVING e DISTINCT · 9 min
As etapas anteriores ensinaram a selecionar e filtrar linhas, ordenar resultados e calcular agregações por grupo. Agora HAVING permite escolher quais grupos ficam no resultado, e DISTINCT permite remover linhas duplicadas da projeção. Os exemplos combinam essas operações com os filtros já conhecidos.
O que foi falado
Vídeo 1 · 00:00:32WHEREfiltra antes,HAVINGfiltra depoisWHEREfiltra as linhas individuais antes de agrupar, por exemplo ficar só com os registros de um cliente.HAVINGfiltra o resultado já agrupado, por exemplo ficar só com os clientes que somaram mais de 5000. Tentar filtrar a soma comWHEREnão funciona, depois de agregar tem que usarHAVING.Ordem
Vídeo 1 · 00:01:33WHERE→GROUP BY→HAVINGNa consulta que usa essas três cláusulas, a ordem escrita é
WHERE ... GROUP BY ... HAVING .... O filtro de linhas ocorre antes da agregação; depois,HAVINGescolhe os grupos que atendem à condição. Por exemplo,WHEREpode selecionar as vendas de um ano antes de somar, eHAVINGpode manter apenas categorias cuja soma supera um limite.
Vídeo 1 · 00:01:41DISTINCTtira duplicadosSELECT DISTINCTremove linhas duplicadas do resultado. Com uma coluna, cada valor aparece uma vez; com várias, cada combinação de valores aparece uma vez.GROUP BYtambém pode produzir valores únicos, masDISTINCTexpressa diretamente a intenção de deduplicar quando você não precisa calcular agregações.SELECT DISTINCT year FROM tabelaAnos com soma maior que 30 usando HAVING
Vídeo 1 · 00:02:39A consulta agrupa por
yeare somaprecipitationcomSUM.HAVING SUM(precipitation) > 30mantém somente os anos cujo total supera 30.AScria o apelidoTotal precipitation, escrito entre aspas duplas porque contém um espaço.SELECT year, SUM(precipitation) AS "Total precipitation" FROM tabela GROUP BY year HAVING SUM(precipitation) > 30Estações únicas com
Vídeo 1 · 00:06:15DISTINCTsemGROUP BYSELECT DISTINCT StationNumber FROM tabelalista cada valor deStationNumberuma só vez. Não há soma nem contagem: a intenção é deduplicar a coluna.GROUP BYpoderia agrupar os mesmos valores, masDISTINCTcomunica esse objetivo de forma direta.SELECT DISTINCT StationNumber FROM tabela
Conceitos da aula
- WHERE
- GROUP BY
- HAVING
- DISTINCT
- SUM
- COUNT
- AVG
- Alias (AS)
Reforce este assunto
- DISTINCT, GROUP BY, HAVING e funções de agregaçãoSQL e Dados · aula 14
- AT Looker Studio e SQL: GROUP BY, HAVING e ORDER BYSQL e Dados · aula 15
- LIKE, BETWEEN, IN, DISTINCT, ORDER BY e GROUP BYSQL e Dados · aula 13