Corrija o bugPráticaSQL
Grupo trocado na media por categoria
Corrigir o GROUP BY para calcular a média por categoria.
A consulta abaixo deveria devolver categoria e media só das vendas com status igual a concluida, com uma linha por categoria e só grupos com mais de uma venda. Ela filtra certo com WHERE e HAVING, mas agrupa por status e devolve o grupo errado. Corrija o GROUP BY para devolver as colunas categoria e media, onde media é AVG(valor) do grupo.
Revisa aula 14 (10/09)
Solução comentada
Verifique uma tentativa sua para liberar a solução.
SELECT categoria, AVG(valor) AS media FROM vendas WHERE status = 'concluida' GROUP BY categoria HAVING COUNT(*) > 1;O WHERE status = 'concluida' filtra as linhas antes de agrupar, então só vendas concluidas entram na conta. O GROUP BY categoria cria um baldinho por categoria e o AVG(valor) ignora o NULL, enquanto o HAVING COUNT(*) > 1 descarta o acessorio que tem só uma linha. Agrupar por status junta tudo num grupo só e devolve uma linha errada.
Erro comum: Manter GROUP BY status achando que o SELECT decide o agrupamento sozinho.
Tabelas
vendas 10 linhas
| id | produto | categoria | valor | status |
|---|---|---|---|---|
| 1 | Camiseta Azul | roupa | 80 | concluida |
| 2 | Camiseta Preta | roupa | 90 | concluida |
| 3 | Tenis Corrida | calcado | 250 | concluida |
| 4 | Tenis Casual | calcado | 200 | pendente |
| 5 | Bone Vermelho | acessorio | 40 | concluida |
| 6 | Meia Branca | acessorio | 20 | cancelada |
| 7 | Calca Jeans | roupa | 150 | concluida |
| 8 | Chinelo Praia | calcado | 50 | concluida |
| 9 | Cinto Couro | acessorio | 40 | pendente |
| 10 | Camiseta Verde | roupa | NULL | pendente |
O código ao lado tem um bug. Encontre, corrija e verifique.