Grouping Part 2
Parte de la sección Fundamentos del Journey de SQL de Coddy — lección 37 de 72.
La palabra clave WHERE ejecuta una condición en cada registro por separado. Por ejemplo:
SELECT * FROM table1
WHERE col1 > col2La col1 > col2 se ejecutará en cada registro y comprobará si se cumple.
Pero ¿qué pasa si queremos filtrar los resultados agregados? Por ejemplo:
SELECT category, AVG(price) FROM table1
WHERE AVG(price) > 40
GROUP BY categoryEsto no funcionará porque WHERE no puede comprobar ninguna agregación. Para eso, tenemos la palabra clave HAVING. Filtra los datos por la condición de agregación.
SELECT category, AVG(price) FROM table1
GROUP BY category
HAVING AVG(price) > 40Esto filtrará todas las categorías cuyo precio promedio sea mayor que 40.
Si queremos combinar HAVING y la cláusula WHERE escribiremos:
SELECT category, AVG(price) FROM table1
WHERE price > 25
GROUP BY category
HAVING AVG(price) > 40Esto primero irá registro por registro y filtrará todos los registros cuyo precio sea mayor que 25, y solo después ejecutará la cláusula GROUP BY y filtrará cada categoría cuyo precio promedio sea mayor que 40.
Desafío
IntermedioTablas y columnas disponibles:
<strong>earthquakes</strong>:<strong>location</strong>,<strong>amplitude</strong>,<strong>period</strong>
La escala de Richter es una escala logarítmica utilizada para medir la magnitud de los terremotos.
Necesitamos devolver la magnitud promedio para cada ubicación de todos los terremotos mayores
Un terremoto mayor se define como:
- La amplitud es mayor o igual a 1
- El período de las ondas es mayor o igual a 1 minuto
Para este desafío, usaremos una fórmula diferente: M = (A/T)<sup>2</sup> / T, que es equivalente a M = ((A/T)*(A/T)) / T.
Devuelve la ubicación y la magnitud promedio de cada ubicación incluyendo solo los terremotos mayores (nombra la columna avg_magnitude). Incluye en tu resultado solo las ubicaciones donde el avg_magnitude es mayor que 1
Redondea los resultados a 2 decimales
Hoja de referencia
La palabra clave WHERE filtra registros individuales, mientras que HAVING filtra resultados agregados después de agrupar:
SELECT category, AVG(price) FROM table1
GROUP BY category
HAVING AVG(price) > 40Para combinar ambas cláusulas:
SELECT category, AVG(price) FROM table1
WHERE price > 25
GROUP BY category
HAVING AVG(price) > 40WHERE filtra los registros primero, luego GROUP BY agrupa los datos restantes, y finalmente HAVING filtra los resultados agrupados.
Pruébalo tú mismo
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones 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