Menu
Coddy logo textTech

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 > col2

La 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 category

Esto 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) > 40

Esto 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) > 40

Esto 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.

challenge icon

Desafío

Intermedio

Tablas 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) > 40

Para combinar ambas cláusulas:

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

WHERE filtra los registros primero, luego GROUP BY agrupa los datos restantes, y finalmente HAVING filtra los resultados agrupados.

Pruébalo tú mismo

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos