Aulas do bloco

← Aulas

SQL e DadosAula 1617/09/20261h31

HAVING vs WHERE, agregações e cálculos

Retoma SELECT com WHERE, IN, LIKE e ORDER BY mais DISTINCT, GROUP BY com COUNT, SUM e AVG e HAVING das aulas do TP3 e da mini-faculdade. Destrava a diferença entre WHERE que filtra antes do grupo e HAVING que filtra depois da agregação. Libera cálculo direto no SELECT com multiplicação e divisão, como desconto e dias, mantendo a regra no banco para garantir integridade.

O que foi falado

  1. WHERE filtra linha, HAVING filtra grupo

    00:15:30

    WHERE filtra linhas antes do agrupamento; HAVING filtra os grupos resultantes. Uma condição sobre AVG() ou COUNT(*) calculado pelo mesmo SELECT vai no HAVING, não no WHERE. Aliases em filtros seguem regras do banco usado; repetir a expressão agregada no HAVING evita depender do alias.

    SQL
    SELECT categoria, AVG(preco) AS media
    FROM cursos
    GROUP BY categoria
    HAVING AVG(preco) > 100;
  2. Média e contagem por categoria com GROUP BY

    00:22:41

    Nos exemplos da aula, a coluna não agregada categoria aparece no GROUP BY, definindo um grupo por categoria. AVG(preco) calcula a média dos preços não nulos e COUNT(*) conta todas as linhas de cada grupo.

    SQL
    SELECT categoria, AVG(preco) AS media, COUNT(*) AS qtd
    FROM cursos
    GROUP BY categoria;
  3. DECIMAL exato, FLOAT e ROUND

    00:28:57

    Em bancos com DECIMAL(p,s), p é o total de dígitos e s é a quantidade depois da vírgula. Assim, DECIMAL(10,2) reserva até 8 dígitos inteiros e 2 fracionários. FLOAT usa representação aproximada; o tipo do resultado de AVG() e SUM() depende do banco e da coluna. ROUND(valor, 2) arredonda para duas casas, mas o formato de exibição pode omitir zeros finais.

    SQL
    SELECT ROUND(AVG(preco), 2) AS media
    FROM cursos;
  4. Filtrar ano e mês com YEAR, MONTH e AND

    00:40:20

    No banco usado na aula, YEAR(data) e MONTH(data) extraem o ano e o mês de uma data. Para selecionar janeiro de 2025, combine MONTH(data) = 1 AND YEAR(data) = 2025; filtrar somente pelo mês incluiria janeiro de outros anos. Essas funções não são nomes universais em todos os bancos SQL.

    SQL
    SELECT *
    FROM matriculas
    WHERE MONTH(data) = 1 AND YEAR(data) = 2025;
  5. GROUP BY com várias colunas e ORDER BY

    00:50:33

    GROUP BY estado, plano cria um grupo para cada combinação de estado e plano. Trocar a ordem dessas duas colunas não muda as combinações agrupadas. ORDER BY controla a exibição; com ORDER BY estado, qtd DESC, estado tem prioridade e qtd ordena os empates.

    SQL
    SELECT estado, plano, COUNT(*) AS qtd
    FROM alunos
    GROUP BY estado, plano
    ORDER BY estado, qtd DESC;
  6. Desconto e dias com cálculo no SELECT

    00:58:22

    O SELECT pode calcular expressões, como preco * 0.9 para aplicar 10% de desconto e carga_horaria / 2 para estimar dias. O literal decimal usa ponto. O cálculo no SELECT não altera os valores armazenados nem garante, sozinho, integridade dos dados. A aula defende centralizar regras no banco; aplicá-las dessa forma exige também os mecanismos adequados à regra.

    SQL
    SELECT nome, preco * 0.9 AS com_desconto, carga_horaria / 2 AS dias
    FROM cursos;

Perguntas que valem a pena

O que significa COUNT(*)?00:27:20

COUNT(*) conta todos os registros linha a linha, e com GROUP BY conta após agrupar.

Qual a diferença entre DECIMAL(10,2) e DECIMAL(12,2)?00:28:49

O primeiro número é a precisão total e o segundo é a escala decimal. DECIMAL(10,2) permite até 8 dígitos antes da vírgula; DECIMAL(12,2), até 10. Ambos reservam 2 casas fracionárias.

Dá para usar 0.90 no cálculo de desconto?01:01:01

Dá, sem problema. Também dá para usar quebrado como 0.95.

A regra de desconto fica no back-end ou no banco no dia a dia?01:02:17

A aula expressa preferência por centralizar a regra no banco. A escolha prática depende da aplicação; calcular uma expressão no SELECT, por si só, não impõe uma regra de integridade.

Conceitos da aula

  • WHERE
  • HAVING
  • GROUP BY
  • COUNT
  • AVG
  • AND
  • ORDER BY
  • DECIMAL(p,s)
  • FLOAT
  • MONTH
  • cálculo aritmético no SELECT
  • regra de negócio no banco

Reforce este assunto

10 exercíciosComeçar →