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 > col2O 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 categoryIsso 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) > 40Isso 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) > 40Isso 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.
Desafio
MédioTabelas 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) > 40Para combinar ambas as cláusulas:
SELECT category, AVG(price) FROM table1
WHERE price > 25
GROUP BY category
HAVING AVG(price) > 40WHERE filtra os registros primeiro, depois GROUP BY agrupa os dados restantes, e finalmente HAVING filtra os resultados agrupados.
Experimente você mesmo
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
4More Keywords
The IN keywordThe BETWEEN keywordThe LIKE keywordThe AS keywordRecap - Cellphone Models2Conditions
Conditions BasicsThe AND keywordThe OR keywordThe NOT keywordMultiple Conditions CombinedParenthesisBooleans5Arithmetic Operations
Mathematical OperatorsMathematical ColumnsThe Modulo OperationThe ROUND() Function3Specific Return Format
Null valuesSort Results Part 1Sort Results Part 2Recap - Cyber Security FirmLimit number of recordsRecap - Vehicle Factory6Intro Challenges
Recap - Parliamentary ElectionRecap - Police Criminal ArrestRecap - Bar Beverage ContainerRecap - Engineer new columns