🔍 Semana 7 - Subconsultas (Subqueries): O Coração do SQL Avançado

Tópico de Alta Complexidade

As subconsultas são consideradas um dos tópicos mais avançados em SQL. Reserve tempo extra para estudar este conteúdo e pratique bastante!

🗄️ Estrutura do Banco de Dados para Prática

Para acompanhar todos os exemplos desta aula, execute o script abaixo no seu banco de dados:

Script Completo de Criação

Execute este script no seu SGBD (MySQL, PostgreSQL, SQLite, etc.) para criar a estrutura completa:

-- ============================================
-- SCRIPT COMPLETO PARA AULA DE SUBCONSULTAS
-- ============================================

-- 1. Criação da tabela ALUNOS
CREATE TABLE alunos (
    id INTEGER PRIMARY KEY,
    nome VARCHAR(100) NOT NULL,
    idade INTEGER NOT NULL,
    curso VARCHAR(50) NOT NULL,
    turma VARCHAR(10) NOT NULL,
    cidade VARCHAR(50) NOT NULL,
    nota_media DECIMAL(4,2) NOT NULL,
    data_matricula DATE,
    ativo BOOLEAN DEFAULT TRUE
);

-- 2. Criação da tabela CURSOS
CREATE TABLE cursos (
    id INTEGER PRIMARY KEY,
    nome_curso VARCHAR(50) NOT NULL,
    carga_horaria INTEGER NOT NULL,
    coordenador VARCHAR(100) NOT NULL,
    modalidade VARCHAR(20) DEFAULT 'Presencial'
);

-- 3. Criação da tabela PROFESSORES
CREATE TABLE professores (
    id INTEGER PRIMARY KEY,
    nome VARCHAR(100) NOT NULL,
    especialidade VARCHAR(50) NOT NULL,
    salario DECIMAL(10,2),
    data_contratacao DATE
);

-- 4. Inserção de dados na tabela ALUNOS
INSERT INTO alunos (id, nome, idade, curso, turma, cidade, nota_media, data_matricula, ativo) VALUES
(1, 'Ana Clara Silva', 17, 'Informática', 'A', 'Garanhuns', 8.5, '2024-01-15', TRUE),
(2, 'Bruno Silva Santos', 18, 'Logística', 'A', 'Caetés', 7.2, '2024-01-20', TRUE),
(3, 'Carlos Eduardo Lima', 19, 'Informática', 'B', 'Garanhuns', 9.1, '2024-02-01', TRUE),
(4, 'Daniela Lima Costa', 17, 'Logística', 'B', 'Capoeiras', 6.8, '2024-02-05', TRUE),
(5, 'Eduarda Souza Oliveira', 18, 'Informática', 'A', 'Garanhuns', 8.9, '2024-02-10', TRUE),
(6, 'Felipe Costa Pereira', 16, 'Logística', 'C', 'Paranatama', 7.5, '2024-02-15', TRUE),
(7, 'Gabriela Ramos Santos', 17, 'Informática', 'C', 'Garanhuns', 9.3, '2024-02-20', TRUE),
(8, 'Henrique Melo Silva', 20, 'Logística', 'A', 'Caetés', 6.2, '2024-03-01', TRUE),
(9, 'Isabela Nunes Costa', 18, 'Informática', 'B', 'Correntes', 8.7, '2024-03-05', TRUE),
(10, 'João Pedro Almeida', 17, 'Logística', 'C', 'Garanhuns', 7.8, '2024-03-10', TRUE),
(11, 'Karla Mendes Silva', 19, 'Informática', 'A', 'Garanhuns', 7.1, '2024-03-15', TRUE),
(12, 'Lucas Ferreira Costa', 18, 'Logística', 'B', 'Caetés', 8.3, '2024-03-20', TRUE);

-- 5. Inserção de dados na tabela CURSOS
INSERT INTO cursos (id, nome_curso, carga_horaria, coordenador, modalidade) VALUES
(1, 'Informática', 1200, 'Prof. Silva', 'Presencial'),
(2, 'Logística', 1000, 'Prof. Santos', 'Presencial'),
(3, 'Administração', 800, 'Prof. Costa', 'EAD');

-- 6. Inserção de dados na tabela PROFESSORES
INSERT INTO professores (id, nome, especialidade, salario, data_contratacao) VALUES
(1, 'Prof. Silva', 'Programação', 5000.00, '2020-01-15'),
(2, 'Prof. Santos', 'Gestão', 4500.00, '2020-02-01'),
(3, 'Prof. Costa', 'Administração', 4200.00, '2020-03-01');

-- 7. Verificação dos dados inseridos
SELECT 'Dados inseridos com sucesso!' AS status;
SELECT COUNT(*) AS total_alunos FROM alunos;
SELECT COUNT(*) AS total_cursos FROM cursos;
SELECT COUNT(*) AS total_professores FROM professores;
Verificação

Após executar o script, você deve ter 12 alunos, 3 cursos e 3 professores cadastrados. Todos os exemplos desta aula usarão estes dados!

🔍 Tópico 1 – Subconsultas: Conceitos Fundamentais
Por que Subconsultas são Importantes?

As subconsultas são o coração do SQL avançado. Elas permitem resolver problemas complexos que seriam impossíveis com consultas simples, tornando você um desenvolvedor SQL muito mais poderoso!

Uma subconsulta (ou subquery) é uma consulta SQL que está aninhada dentro de outra consulta. Ela é executada primeiro e seu resultado é usado pela consulta externa (principal).

🎯 Por que usar Subconsultas?
  • Filtros dinâmicos: Baseados em cálculos
  • Comparações complexas: Entre diferentes conjuntos
  • Relatórios avançados: Análises sofisticadas
  • Performance: Muitas vezes mais eficientes
  • Flexibilidade: Soluções criativas
  • Manutenibilidade: Código mais limpo
  • Reutilização: Lógica compartilhada
  • Profissionalismo: SQL de nível sênior
📌 Sintaxe Básica - A Estrutura Fundamental:

-- Estrutura básica de uma subconsulta
SELECT coluna1, coluna2
FROM tabela1
WHERE coluna1 IN (
    SELECT coluna 
    FROM tabela2 
    WHERE condição
);
            
🧪 Exemplo Prático - Análise de Performance:

Cenário: Encontrar todos os alunos que têm idade maior que a média de idade de todos os alunos.


-- Subconsulta escalar (retorna um único valor)
SELECT nome, idade
FROM alunos
WHERE idade > (SELECT AVG(idade) FROM alunos);
            
Como Funciona:
  1. Passo 1: A subconsulta (SELECT AVG(idade) FROM alunos) calcula a média de idade
  2. Passo 2: A consulta externa usa esse resultado para filtrar
  3. Passo 3: Retorna apenas alunos com idade acima da média
Vídeo Explicativo - Conceitos de Subconsultas

Vídeo: Introdução às Subconsultas em SQL - Curso em Vídeo (10 minutos)

🌍 Aplicações Reais - Casos de Uso Práticos:
Educação
  • Alunos com notas acima da média
  • Cursos com mais alunos
  • Professores com melhor avaliação
E-commerce
  • Produtos mais vendidos
  • Clientes com maior gasto
  • Vendas acima da média
Empresas
  • Funcionários com maior salário
  • Departamentos mais produtivos
  • Projetos com maior lucro
⚠️ Importante: As subconsultas são executadas de dentro para fora. Primeiro a subconsulta, depois a consulta principal. Isso é fundamental para entender a performance!
🎯 Tópico 2 – Tipos de Subconsultas (Escalares, Lista, Correlacionadas)
Classificação por Complexidade

As subconsultas são classificadas por tipo de retorno e relacionamento com a consulta externa. Entender essas diferenças é crucial!

🔢 1. Subconsultas Escalares (Mais Simples)

Definição: Retornam um único valor (uma linha, uma coluna). Podem ser usadas em comparações diretas.

📝 Exemplo Prático:

-- Encontrar alunos com idade maior que a média
SELECT nome, idade
FROM alunos
WHERE idade > (SELECT AVG(idade) FROM alunos);
                    

Como funciona: A subconsulta (SELECT AVG(idade) FROM alunos) retorna um único número (a média), que é usado na comparação.

📋 2. Subconsultas de Lista (Médias)

Definição: Retornam uma lista de valores. Usadas com operadores como IN, NOT IN, ANY, ALL.

📝 Exemplo Prático:

-- Encontrar alunos de cursos que têm mais de 3 estudantes
SELECT nome, curso
FROM alunos
WHERE curso IN (
    SELECT curso 
    FROM alunos 
    GROUP BY curso 
    HAVING COUNT(*) > 3
);
                    

Como funciona: A subconsulta retorna uma lista de cursos, e o IN verifica se o curso do aluno está nessa lista.

⚡ 3. Subconsultas Correlacionadas (Mais Complexas)

Definição: Referenciam colunas da consulta externa. Executadas para cada linha da consulta principal.

📝 Exemplo Prático:

-- Encontrar o melhor aluno de cada curso
SELECT a.nome, a.curso, a.nota_media
FROM alunos a
WHERE a.nota_media = (
    SELECT MAX(nota_media) 
    FROM alunos b 
    WHERE b.curso = a.curso
);
                    

Como funciona: Para cada aluno, a subconsulta calcula a maior nota do seu curso. Se a nota do aluno for igual à maior nota, ele é selecionado.

Comparação dos Tipos de Subconsultas
Tipo Retorna Execuções Complexidade Uso Comum
Escalar 1 valor 1 vez Baixa Comparações simples
Lista Múltiplos valores 1 vez Média Filtros com IN/NOT IN
Correlacionada 1 valor por linha N vezes Alta Análises por grupo
Vídeo: Tipos de Subconsultas em Ação

Vídeo: Subconsultas em SQL - Tipos e Exemplos Práticos (15 minutos)

💡 Dica de Performance: Subconsultas correlacionadas são executadas N vezes (uma para cada linha), então use com cuidado em tabelas grandes!
⚡ Tópico 3 – Subconsultas Correlacionadas (Avançado)
Nível Avançado

As subconsultas correlacionadas são o nível mais avançado de SQL. Elas são poderosas, mas complexas. Domine este conceito e você será um expert em SQL!

🧠 O que são Subconsultas Correlacionadas?

Uma subconsulta correlacionada é aquela que referencia colunas da consulta externa. Ela é executada uma vez para cada linha da consulta principal, criando uma relação dinâmica entre as duas consultas.

⚡ Características Únicas:
  • Referência Externa: Usa colunas da consulta principal
  • Execução Múltipla: Roda para cada linha
  • Dinâmica: Resultado muda por linha
  • Poderosa: Resolve problemas complexos
  • Flexível: Análises por grupo
  • Performance: Pode ser lenta em tabelas grandes
🎯 Exemplo 1: Encontrar o Melhor de Cada Grupo
📝 Problema:

Encontrar o aluno com a maior nota em cada curso.

💡 Solução com Subconsulta Correlacionada:

-- Encontrar o melhor aluno de cada curso
SELECT a.nome, a.curso, a.nota_media
FROM alunos a
WHERE a.nota_media = (
    SELECT MAX(nota_media) 
    FROM alunos b 
    WHERE b.curso = a.curso  -- ← Esta é a correlação!
);
                    
🔍 Como funciona:
  1. Para cada aluno (a), a subconsulta calcula a maior nota do seu curso
  2. A condição b.curso = a.curso cria a correlação
  3. Se a nota do aluno for igual à maior nota do curso, ele é selecionado
🎯 Exemplo 2: Análise Comparativa
📝 Problema:

Encontrar alunos com nota acima da média do seu próprio curso.


-- Alunos com nota acima da média do seu curso
SELECT a.nome, a.curso, a.nota_media
FROM alunos a
WHERE a.nota_media > (
    SELECT AVG(nota_media) 
    FROM alunos b 
    WHERE b.curso = a.curso  -- ← Correlação por curso
);
                    
🎯 Exemplo 3: Ranking Relativo
📝 Problema:

Encontrar alunos que estão entre os 3 melhores do seu curso.


-- Top 3 alunos de cada curso
SELECT a.nome, a.curso, a.nota_media
FROM alunos a
WHERE (
    SELECT COUNT(*) 
    FROM alunos b 
    WHERE b.curso = a.curso 
    AND b.nota_media > a.nota_media
) < 3;  -- Menos de 3 pessoas têm nota maior
                    
Vídeo: Subconsultas Correlacionadas em Ação

Vídeo: Subconsultas Correlacionadas - SQL Avançado (20 minutos)

⚡ Operadores Especiais para Subconsultas Correlacionadas:
Operador Descrição Exemplo
EXISTS Verifica se existe pelo menos um registro WHERE EXISTS (SELECT 1 FROM tabela WHERE condição)
NOT EXISTS Verifica se NÃO existe nenhum registro WHERE NOT EXISTS (SELECT 1 FROM tabela WHERE condição)
ANY/SOME Verdadeiro se qualquer valor satisfaz a condição WHERE valor > ANY (SELECT coluna FROM tabela)
ALL Verdadeiro se todos os valores satisfazem a condição WHERE valor > ALL (SELECT coluna FROM tabela)
⚠️ Cuidado com Performance: Subconsultas correlacionadas podem ser lentas em tabelas grandes. Sempre teste a performance e considere alternativas como JOINs quando possível.
🏷️ Tópico 4 – Aliases: Simplificando Consultas Complexas
Aliases em Subconsultas

Os aliases são essenciais em subconsultas complexas. Eles tornam o código mais legível e evitam ambiguidades quando há múltiplas tabelas com nomes de colunas similares.

🎯 Por que Aliases são Cruciais em Subconsultas?
  • Legibilidade: Código mais claro e organizado
  • Evita Ambiguidade: Especifica exatamente qual tabela
  • Manutenibilidade: Mais fácil de modificar
  • Performance: Ajuda o otimizador do banco
  • Profissionalismo: Código de nível sênior
  • Debugging: Mais fácil identificar problemas
📌 Sintaxe de Aliases em Subconsultas:

-- Aliases de tabela (obrigatórios em subconsultas correlacionadas)
SELECT a.nome, a.curso
FROM alunos a
WHERE a.nota_media > (
    SELECT AVG(b.nota_media) 
    FROM alunos b 
    WHERE b.curso = a.curso
);

-- Aliases de coluna (para resultados mais claros)
SELECT 
    a.nome AS "Nome do Aluno",
    a.curso AS "Curso",
    a.nota_media AS "Nota Média"
FROM alunos a;
            
🧪 Exemplo Prático: Subconsulta Correlacionada com Aliases
📝 Problema:

Encontrar alunos com nota acima da média do seu curso, mostrando informações claras.


-- Solução com aliases claros
SELECT 
    a.nome AS "Nome do Aluno",
    a.curso AS "Curso",
    a.nota_media AS "Nota do Aluno",
    (SELECT AVG(b.nota_media) 
     FROM alunos b 
     WHERE b.curso = a.curso) AS "Média do Curso"
FROM alunos a
WHERE a.nota_media > (
    SELECT AVG(b.nota_media) 
    FROM alunos b 
    WHERE b.curso = a.curso
)
ORDER BY a.curso, a.nota_media DESC;
                    
✅ Vantagens dos Aliases:
  • a e b distinguem as tabelas
  • Nomes de colunas descritivos no resultado
  • Código mais fácil de entender
🎯 Exemplo Avançado: Múltiplas Subconsultas
📝 Problema Complexo:

Encontrar alunos que estão entre os 3 melhores do seu curso, com informações detalhadas.


-- Ranking relativo com aliases
SELECT 
    a.nome AS "Nome",
    a.curso AS "Curso", 
    a.nota_media AS "Nota",
    (SELECT COUNT(*) 
     FROM alunos b 
     WHERE b.curso = a.curso 
     AND b.nota_media > a.nota_media) + 1 AS "Posição no Curso"
FROM alunos a
WHERE (
    SELECT COUNT(*) 
    FROM alunos b 
    WHERE b.curso = a.curso 
    AND b.nota_media > a.nota_media
) < 3
ORDER BY a.curso, a.nota_media DESC;
                    
Vídeo: Aliases em Subconsultas Complexas

Vídeo: Aliases e Boas Práticas em SQL (12 minutos)

💡 Dicas de Boas Práticas:
✅ Faça:
  • Use aliases curtos mas descritivos
  • Seja consistente (a, b, c...)
  • Use aliases em subconsultas correlacionadas
  • Dê nomes claros às colunas de resultado
❌ Evite:
  • Aliases muito longos
  • Nomes confusos (t1, t2, t3...)
  • Esquecer aliases em JOINs
  • Misturar estilos de nomenclatura
💡 Lembre-se: Em subconsultas correlacionadas, os aliases são obrigatórios para distinguir entre a tabela externa e interna. Sem eles, o banco não saberá qual tabela você está referenciando!
📊 Tópico 5 – Ordenação com ORDER BY
ORDER BY em Subconsultas

A ordenação é fundamental para apresentar resultados de subconsultas de forma organizada e útil. Vamos ver como combinar ORDER BY com subconsultas complexas.

📌 Sintaxe Básica de ORDER BY:

-- Ordenação simples
SELECT coluna1, coluna2
FROM tabela
ORDER BY coluna1 ASC, coluna2 DESC;

-- Ordenação com aliases
SELECT 
    nome AS "Nome",
    curso AS "Curso"
FROM alunos
ORDER BY "Nome" ASC;
            
🎯 ORDER BY com Subconsultas - Casos Práticos:
📝 Exemplo 1: Ranking com Subconsulta

Encontrar os 5 melhores alunos com nota acima da média, ordenados por nota.


-- Top 5 alunos acima da média
SELECT 
    a.nome AS "Nome",
    a.curso AS "Curso",
    a.nota_media AS "Nota"
FROM alunos a
WHERE a.nota_media > (SELECT AVG(nota_media) FROM alunos)
ORDER BY a.nota_media DESC
LIMIT 5;
                    
📝 Exemplo 2: Ordenação Múltipla com Subconsulta

Alunos ordenados por curso e depois por nota (maior primeiro).


-- Ordenação por curso e nota
SELECT 
    a.nome AS "Nome",
    a.curso AS "Curso",
    a.nota_media AS "Nota"
FROM alunos a
ORDER BY a.curso ASC, a.nota_media DESC;
                    
📝 Exemplo 3: Ordenação por Coluna Calculada

Alunos ordenados pela diferença entre sua nota e a média do curso.


-- Ordenação por diferença da média
SELECT 
    a.nome AS "Nome",
    a.curso AS "Curso",
    a.nota_media AS "Nota",
    a.nota_media - (SELECT AVG(b.nota_media) 
                    FROM alunos b 
                    WHERE b.curso = a.curso) AS "Diferença da Média"
FROM alunos a
ORDER BY "Diferença da Média" DESC;
                    
⚡ Técnicas Avançadas de Ordenação:
🎯 Ordenação Condicional

-- Ordenar por curso, mas Informática primeiro
SELECT nome, curso, nota_media
FROM alunos
ORDER BY 
    CASE curso 
        WHEN 'Informática' THEN 1 
        ELSE 2 
    END,
    nota_media DESC;
                            
🎯 Ordenação por Posição

-- Ordenar por posição no curso
SELECT 
    nome, curso, nota_media,
    (SELECT COUNT(*) + 1 
     FROM alunos b 
     WHERE b.curso = a.curso 
     AND b.nota_media > a.nota_media) AS "Posição"
FROM alunos a
ORDER BY curso, "Posição";
                            
Vídeo: Ordenação Avançada em SQL

Vídeo: ORDER BY e Técnicas de Ordenação em SQL (15 minutos)

💡 Dicas de Performance para ORDER BY:
✅ Boas Práticas:
  • Use índices nas colunas de ordenação
  • Evite ORDER BY em subconsultas desnecessárias
  • Combine com LIMIT para grandes datasets
  • Use aliases para colunas calculadas
❌ Evite:
  • ORDER BY em subconsultas correlacionadas
  • Ordenação por colunas não indexadas
  • Múltiplas ordenações desnecessárias
  • ORDER BY com funções complexas
⚠️ Importante: ORDER BY sempre vem por último na consulta, após WHERE, GROUP BY e HAVING. Em subconsultas, use ORDER BY apenas quando necessário!
🧪 Tópico 6 – Exercícios Práticos Avançados
Hora da Prática!

Agora vamos aplicar tudo que aprendemos sobre subconsultas em exercícios práticos. Estes exercícios simulam situações reais do mercado de trabalho!

📘 Criação da Base de Dados para Prática

Use o seguinte script para criar as tabelas e dados de exemplo:

-- Tabela de alunos
CREATE TABLE alunos (
    id INTEGER PRIMARY KEY,
    nome TEXT,
    idade INTEGER,
    curso TEXT,
    turma TEXT,
    cidade TEXT,
    nota_media REAL
);

-- Tabela de cursos
CREATE TABLE cursos (
    id INTEGER PRIMARY KEY,
    nome_curso TEXT,
    carga_horaria INTEGER,
    coordenador TEXT
);

-- Inserção de dados
INSERT INTO alunos (id, nome, idade, curso, turma, cidade, nota_media) VALUES
(1, 'Ana Clara', 17, 'Informática', 'A', 'Garanhuns', 8.5),
(2, 'Bruno Silva', 18, 'Logística', 'A', 'Caetés', 7.2),
(3, 'Carlos Eduardo', 19, 'Informática', 'B', 'Garanhuns', 9.1),
(4, 'Daniela Lima', 17, 'Logística', 'B', 'Capoeiras', 6.8),
(5, 'Eduarda Souza', 18, 'Informática', 'A', 'Garanhuns', 8.9),
(6, 'Felipe Costa', 16, 'Logística', 'C', 'Paranatama', 7.5),
(7, 'Gabriela Ramos', 17, 'Informática', 'C', 'Garanhuns', 9.3),
(8, 'Henrique Melo', 20, 'Logística', 'A', 'Caetés', 6.2),
(9, 'Isabela Nunes', 18, 'Informática', 'B', 'Correntes', 8.7),
(10, 'João Pedro', 17, 'Logística', 'C', 'Garanhuns', 7.8);

INSERT INTO cursos (id, nome_curso, carga_horaria, coordenador) VALUES
(1, 'Informática', 1200, 'Prof. Silva'),
(2, 'Logística', 1000, 'Prof. Santos');
🎯 Exercícios Progressivos:
🔍 Exercício 1: Subconsulta Escalar

Desafio: Encontre todos os alunos com nota acima da média geral da escola.

💡 Dica: Use uma subconsulta escalar com AVG() para calcular a média.
📊 Exercício 2: Subconsulta de Lista

Desafio: Encontre alunos de cursos que têm mais de 4 estudantes matriculados.

💡 Dica: Use IN com uma subconsulta que agrupa por curso e conta alunos.
⚡ Exercício 3: Subconsulta Correlacionada

Desafio: Encontre o melhor aluno de cada curso (maior nota por curso).

💡 Dica: Use aliases (a, b) e compare a nota do aluno com a maior nota do seu curso.
🏆 Exercício 4: Ranking Relativo

Desafio: Encontre alunos que estão entre os 3 melhores do seu curso.

💡 Dica: Use COUNT() para contar quantos alunos têm nota maior que o aluno atual.
📈 Exercício 5: Análise Comparativa

Desafio: Encontre alunos com nota superior à média do seu próprio curso, ordenados por diferença da média.

💡 Dica: Combine subconsulta correlacionada com ORDER BY e aliases para colunas calculadas.
Vídeo: Soluções dos Exercícios

Vídeo: Exercícios Práticos de Subconsultas - Curso em Vídeo (25 minutos)

💪 Desafio Extra: Tente resolver os exercícios sem olhar as dicas primeiro. Isso vai testar seu conhecimento real sobre subconsultas!
🚀 Tópico 7 – Desafio Final: Subconsultas Complexas
Nível Expert

Estes são os desafios mais complexos de subconsultas. Se você conseguir resolver estes, você domina SQL avançado!

🎯 Desafios de Nível Sênior:
🏆 Desafio 1: Análise de Performance por Região

Problema: Encontre alunos que moram em cidades onde a média de notas é superior à média geral da escola, mostrando nome, cidade, nota e média da cidade.

🔥 Complexidade: Subconsulta correlacionada + agregação + comparação
📊 Desafio 2: Relatório Executivo Completo

Problema: Para cada curso, mostre: nome do curso, número de alunos, média geral, melhor aluno, pior aluno, e quantos alunos estão acima da média do curso.

🔥 Complexidade: Múltiplas subconsultas + agregações + aliases
⚡ Desafio 3: Sistema de Ranking Avançado

Problema: Crie um ranking completo mostrando: posição no curso, nome, curso, nota, diferença da média do curso, e percentual de alunos com nota menor.

🔥 Complexidade: Subconsultas correlacionadas + cálculos percentuais + ordenação
🎓 Desafio 4: Análise de Talentos

Problema: Identifique "talentos" (alunos com nota no top 20% do seu curso) e "alunos em risco" (nota no bottom 20% do seu curso), com estatísticas detalhadas.

🔥 Complexidade: Percentis + subconsultas + análise estatística
📈 Desafio 5: Dashboard Executivo

Problema: Crie um relatório que mostre, para cada turma: nome da turma, curso, número de alunos, média de notas, melhor aluno, pior aluno, alunos acima da média, e ranking da turma no curso.

🔥 Complexidade: Análise multidimensional + múltiplas subconsultas + ranking relativo
🎉 Parabéns! Se você chegou até aqui, você tem uma base sólida em subconsultas SQL. Continue praticando e explore casos reais do seu trabalho ou projetos pessoais!
📚 Material de Estudo

Baixe o material completo da Semana 7 em PDF para estudo offline!

Baixar PDF Iniciar Quiz