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
00:09:20WHEREfiltra linha eHAVINGfiltra grupoWHEREroda antes de agrupar e filtra linhas.HAVINGroda depois e filtra o resultado já agregado. Por isso média ou contagem por categoria usaGROUP BYcomWHEREantes eHAVINGdepois.SELECT id_curso, COUNT(*) AS total FROM matriculas GROUP BY id_curso HAVING COUNT(*) > 5
00:14:22CASTtroca tipo eDAY,MONTH,YEARextraem dataCAST(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.
SELECT DAY(data_matricula) AS dia, CAST(DAY(data_matricula) AS VARCHAR) AS dia_txt FROM matriculas
00:18:59CONCATjunta valores com vírgulaCONCATrecebe valores separados por vírgula e devolve uma string. A aula usou para remontar data como dia,'/', mês,'/', ano e para montar frase comid_alunoedata_matricula. Texto literal vai entre aspas simples, como'/'.SELECT CONCAT(id_aluno, ' matriculado em ', data_matricula) AS frase FROM matriculas
00:54:50SUBSTRING,CONVERTe data no DuckDBCAST 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.
SELECT SUBSTRING(nome, 1, 3) AS inicio FROM alunosVárias agregações e regra do
01:08:51GROUP BYCOUNT, 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.
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
- Agregação com GROUP BY: SUM, COUNT, AVG, MIN e MAXSQL e Dados · trilha, etapa 8
- HAVING e DISTINCT com GROUP BYSQL e Dados · trilha, etapa 9
- ORDER BY: ordenação com ASC e DESCSQL e Dados · trilha, etapa 7