Problema:
Quiere encontrar grupos de filas con un número específico de entradas en un grupo.
Ejemplo:
Nuestra base de datos tiene una tabla llamada product
con datos en las siguientes columnas:id
, name
y category
.
id | nombre | categoría |
---|---|---|
1 | sofá | muebles |
2 | guantes | ropa |
3 | Camiseta | ropa |
4 | silla | muebles |
5 | escritorio | muebles |
6 | ver | electrónica |
7 | sillón | muebles |
8 | falda | ropa |
9 | receptor de radio | electrónica |
Busquemos la categoría de productos con más de dos entradas.
Solución:
SELECT category, COUNT(id) FROM product GROUP BY category HAVING COUNT(id)>2;
Estos son los resultados:
categoría | contar |
---|---|
mobiliario | 4 |
ropa | 3 |
Discusión:
Para filtrar registros según el número dado de filas en el grupo, use la cláusula HAVING. Filtra filas usando una función agregada de condición como COUNT. Primero, en SELECCIONAR, use el nombre de una columna o columnas para agrupar filas (esta es una categoría en nuestro ejemplo), luego coloque la función agregada CONTAR, que cuenta la cantidad de registros en cada grupo. Para contar el número de filas, use la columna id que almacena valores únicos (en nuestro ejemplo usamos COUNT(id)
). A continuación, utilice la cláusula GROUP BY para agrupar registros según columnas (el GROUP BY
categoría anterior). Después de usar GROUP BY para filtrar registros con funciones agregadas como COUNT, use la cláusula HAVING. Siempre se usa después de la cláusula GROUP BY. En HAVING, usamos una condición para comparar un valor con uno devuelto por la función agregada. En el ejemplo, comparamos si COUNT(id) devuelve un valor superior a dos. Si es verdadero, la categoría se devuelve con el recuento de productos.