SQL: agregações
O curso trata de agrupamento e agregação de linhas no PostgreSQL, com uma pequena tabela de pedidos em três status. Ele mostra como o GROUP BY junta as linhas numa só por valor distinto e por que toda outra coluna selecionada precisa ser um agregado. Passa por COUNT(*), COUNT(coluna) e COUNT(DISTINCT), além de SUM e AVG com resultados decimais. O HAVING filtra grupos depois que o WHERE filtra linhas. Por fim, as mesmas queries aparecem no ActiveRecord com .group, .count, .sum, .average e .having, comparadas com somar em Ruby.
O que você vai aprender
- ✓Como o GROUP BY junta linhas e por que as outras colunas precisam ser agregados
- ✓A diferença entre COUNT(*), COUNT(coluna) e COUNT(DISTINCT coluna)
- ✓Totais e médias por grupo com SUM e AVG
- ✓Filtrar grupos com HAVING e a ordem WHERE, GROUP BY, HAVING
- ✓Agrupar e agregar no ActiveRecord com .group, .count, .sum, .average e .having
- ✓Por que agregar no banco de dados dá menos trabalho que somar linhas em Ruby
GROUP BY: colapsando linhas em grupos
Seis linhas entraram nessa tabela: três "shipped", duas "pending", uma "cancelled". O curso SQL: WHERE & Operators já mostrou como puxar um status de cada vez, WHERE status = 'shipped' correspondendo a essas três linhas. GROUP BY faz uma pergunta diferente: não "me dá os shipped," mas "me dá uma…
Ler a aula completa grátis →Currículo
7 aulasGROUP BY: colapsando linhas em grupos
GROUP BY junta as linhas com o mesmo valor numa só linha, e o WHERE filtra antes do agrupamento.
COUNT: contando linhas e valores
COUNT(*) conta todas as linhas, COUNT(coluna) ignora NULL e COUNT(DISTINCT) conta quantos valores diferentes aparecem.
SUM & AVG: totais e médias por grupo
SUM soma uma coluna por grupo ou na tabela inteira, e AVG devolve um resultado decimal sem truncar.
HAVING: filtrando depois da agregação
HAVING filtra grupos depois do GROUP BY, porque o WHERE roda antes e não enxerga agregados como COUNT(*).
GROUP BY no ActiveRecord: .group, .count, .sum
No ActiveRecord, .group com .count, .sum, .average e .having devolve hashes por grupo iguais aos resultados do SQL puro.
Agregue no banco de dados, não no Ruby
Somar em Ruby carrega e descarta todas as linhas completas, enquanto .sum faz o PostgreSQL devolver um só número.
Juntando tudo: agrupando e agregando
Uma única query SQL combina WHERE, GROUP BY, COUNT, SUM e HAVING, e o ActiveRecord traduz a parte da contagem.