Menu
Coddy logo textTech

Grouping Part 2

Parte da seção Fundamentos do Journey de SQL da Coddy — lição 37 de 72.

A palavra-chave WHERE executa uma condição em cada registro separadamente. Por exemplo:

SELECT * FROM table1
WHERE col1 > col2

O col1 > col2 será executado em cada registro e verificará se está satisfeito.

Mas e se quisermos filtrar resultados agregados? Por exemplo:

SELECT category, AVG(price) FROM table1
WHERE AVG(price) > 40
GROUP BY category

Isso não funcionará porque WHERE não pode verificar agregações. Para isso, temos a palavra-chave HAVING. Ela filtra os dados pela condição de agregação.

SELECT category, AVG(price) FROM table1
GROUP BY category
HAVING AVG(price) > 40

Isso filtrará todas as categorias para as quais o preço médio é maior que 40.

Se quisermos combinar as cláusulas HAVING e WHERE, escreveremos:

SELECT category, AVG(price) FROM table1
WHERE price > 25
GROUP BY category
HAVING AVG(price) > 40

Isso primeiro percorrerá registro por registro e filtrará todos os registros cujo preço é maior que 25, e somente depois executará a cláusula GROUP BY e filtrará cada categoria cuja média de preço é maior que 40.

challenge icon

Desafio

Médio

Tabelas e colunas disponíveis:

  • <strong>earthquakes</strong>: <strong>location</strong>, <strong>amplitude</strong>, <strong>period</strong>

A escala Richter é uma escala logarítmica usada para medir a magnitude de terremotos.

Precisamos retornar a magnitude média para cada localização de todos os grandes terremotos

Um grande terremoto é definido como:

  • A amplitude é maior ou igual a 1
  • O período das ondas é maior ou igual a 1 minuto

Para este desafio, usaremos uma fórmula diferente: M = (A/T)<sup>2</sup> / T, que é equivalente a M = ((A/T)*(A/T)) / T.

Retorne a localização e a magnitude média de cada localização, incluindo apenas os grandes terremotos (nomeie a coluna avg_magnitude). Inclua no seu resultado apenas as localizações onde o avg_magnitude é maior que 1

Arredonde os resultados para 2 casas decimais

Folha de consulta

A palavra-chave WHERE filtra registros individuais, enquanto HAVING filtra resultados agregados após o agrupamento:

SELECT category, AVG(price) FROM table1
GROUP BY category
HAVING AVG(price) > 40

Para combinar ambas as cláusulas:

SELECT category, AVG(price) FROM table1
WHERE price > 25
GROUP BY category
HAVING AVG(price) > 40

WHERE filtra os registros primeiro, depois GROUP BY agrupa os dados restantes, e finalmente HAVING filtra os resultados agrupados.

Experimente você mesmo

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos