Aulas do bloco

← Aulas

SQL e DadosAula 1721/09/20261h18

CAST, CONCAT, formatação de data e múltiplas agregações

Retoma SELECT com WHERE, GROUP BY com COUNT, SUM e AVG e HAVING das aulas do TP3 e da mini-faculdade. Introduz CAST para trocar tipo e CONCAT para juntar valores em texto e destrava formatação de data e várias agregações no mesmo SELECT. CASE WHEN fica para a próxima aula.

O que foi falado

  1. WHERE filtra linha e HAVING filtra grupo

    00:09:20

    WHERE roda antes de agrupar e filtra linhas. HAVING roda depois e filtra o resultado já agregado. Por isso média ou contagem por categoria usa GROUP BY com WHERE antes e HAVING depois.

    SQL
    SELECT id_curso, COUNT(*) AS total
    FROM matriculas
    GROUP BY id_curso
    HAVING COUNT(*) > 5
  2. CAST troca tipo e DAY, MONTH, YEAR extraem data

    00:14:22

    CAST(expressao AS VARCHAR) converte o valor para texto; nesse AS, VARCHAR é o tipo de destino. DAY, MONTH e YEAR extraem partes de uma data no banco usado na aula. O exemplo extrai primeiro DAY(data_matricula) e depois converte esse número para texto, sem precisar transformar a data inteira antes.

    SQL
    SELECT DAY(data_matricula) AS dia,
    CAST(DAY(data_matricula) AS VARCHAR) AS dia_txt
    FROM matriculas
  3. CONCAT junta valores com vírgula

    00:18:59

    CONCAT recebe valores separados por vírgula e devolve uma string. A aula usou para remontar data como dia, '/', mês, '/', ano e para montar frase com id_aluno e data_matricula. Texto literal vai entre aspas simples, como '/'.

    SQL
    SELECT CONCAT(id_aluno, ' matriculado em ', data_matricula) AS frase
    FROM matriculas
  4. SUBSTRING, CONVERT e data no DuckDB

    00:54:50

    CAST converte tipos e SUBSTRING(nome, 1, 3) extrai os três primeiros caracteres. Para formatar datas no DuckDB, a aula utiliza STRFTIME; funções e formatos de SQL Server não são automaticamente compatíveis. As regras de aliases variam entre bancos: DuckDB permite reutilizar um alias em uma expressão posterior do mesmo SELECT.

    SQL
    SELECT SUBSTRING(nome, 1, 3) AS inicio
    FROM alunos
  5. Várias agregações e regra do GROUP BY

    01:08:51

    COUNT, MIN, MAX e SUM podem aparecer no mesmo SELECT para resumir cada curso ou aluno. Nos exemplos, toda coluna não agregada selecionada também aparece no GROUP BY, para identificar o grupo. ORDER BY receita DESC ordena os resultados pela receita, sem depender da ordem de agrupamento.

    SQL
    SELECT id_curso, COUNT(*) AS total, MIN(preco) AS menor, MAX(preco) AS maior, SUM(preco) AS receita
    FROM matriculas
    GROUP BY id_curso
    ORDER BY receita DESC

Perguntas que valem a pena

CAST é conversão e CONCAT é concatenação?00:48:27

Sim. CAST troca o tipo do valor e CONCAT junta valores separados por vírgula em uma string.

Dá para fazer o CONCAT usando o apelido criado no próprio SELECT?00:42:51

Depende do banco. DuckDB permite reutilizar um alias em expressões posteriores do mesmo SELECT e permite aliases não agregados no WHERE. Um alias de agregação deve ser filtrado no HAVING. Para consultas portáveis, confira o dialeto ou repita a expressão adequada.

Por que dá erro ao trazer coluna sem agregação com GROUP BY só de id_aluno?01:05:39

Toda coluna sem agregação no SELECT precisa estar no GROUP BY se fizer sentido para a pergunta.

Qual a diferença entre CAST e CONVERT?00:49:19

CAST expressa a conversão de um valor para outro tipo. CONVERT é uma função cuja sintaxe e opções dependem do banco, não um nome universal para formatar qualquer valor. No trecho sobre DuckDB, a formatação de data é feita com STRFTIME.

Conceitos da aula

  • WHERE
  • GROUP BY
  • HAVING
  • COUNT
  • SUM
  • MONTH
  • CAST
  • CONCAT
  • MIN
  • MAX
  • SUBSTRING
  • ORDER BY

Reforce este assunto

9 exercíciosComeçar →