3.1 Declaración GRUPO POR
El lenguaje SQL es muy poderoso. Además de la obtención de datos simple, le permite agrupar datos en el momento de la consulta. Por ejemplo, queremos saber cuántos tipos de productos de cada marca tenemos, ¿cómo podemos hacer eso?
Hay un operador especial para esto GROUP BY
, así es como se escribe.
GROUP BY column
Escribamos una consulta que le pida a SQL que muestre la cantidad de tipos de productos para cada marca. Tal solicitud sería algo como esto:
SELECT brand, COUNT(*)
FROM product
GROUP BY brand
Obtendrá el siguiente resultado de la consulta:
marca | contar(*) |
---|---|
(NULO) | 2 |
el bosco | 4 |
IKEA | 6 |
LG | 2 |
flor inteligente | 1 |
Analicemos cuidadosamente qué tipo de solicitud escribimos y qué tipo de resultado obtuvimos. Como resultado, vemos dos columnas. El primero con una lista de marcas, lo cual es lógico. Queríamos obtener algo así como un conjunto de pares "marca --> cantidad" .
Tenga en cuenta que entre las marcas hay una palabra NULL
. Efectivamente, tenemos productos de la marca en la que está escrito NULL
, y los vemos aquí. Un poco inesperado, pero útil. Podemos ver cuántos productos sin marca hay.
Ahora echemos un vistazo más de cerca a la solicitud. Queríamos saber la cantidad de productos de cada marca, entonces escribimos , GROUP BY brand
y en marca y la expresiónSELECT
COUNT(*)
COUNT(*)
es una llamada función agregada que se realiza en un grupo de filas. En nuestro caso, simplemente cuenta su número. Hay muchas funciones de este tipo, y las veremos un poco más adelante.
3.2 Consultas complejas con GROUP BY
Ahora, escribamos una consulta en la que primero descartemos productos cuyo precio sea inferior a 10 y luego los agrupemos. Tal solicitud sería algo como esto:
SELECT brand, COUNT(*)
FROM product
WHERE price > 10
GROUP BY brand
Obtendrá el siguiente resultado de la consulta:
marca | contar(*) |
---|---|
el bosco | 4 |
IKEA | 5 |
LG | 2 |
flor inteligente | 1 |
Todos los productos NULL desaparecieron de nuestra tabla de resultados, ya que eran muy baratos, y el número de productos IKEA disminuyó en 1. De 6 a 5.
Esto sugiere que primero aplique WHERE
las líneas deseadas para filtrar y solo luego aplique la agrupación al resultado.
3.3 Nombres de columna del resultado
Por cierto, puede dar nombres a las columnas resultantes. ¿Ves cómo el servidor sugirió el nombre count(*)
? Vamos a reemplazarlo con total. Tal solicitud sería algo como esto:
SELECT brand, COUNT(*) AS total
FROM product
WHERE price > 10
GROUP BY brand
Obtendrá el siguiente resultado de la consulta:
marca | total |
---|---|
el bosco | 4 |
IKEA | 5 |
LG | 2 |
flor inteligente | 1 |
También puede cambiar el nombre de las columnas existentes. Tomemos una de las consultas utilizadas anteriormente y agreguemos nuevos nombres a las columnas.
SELECT
id AS product_id,
name AS product_name,
price
FROM product
WHERE price < 20 AND brand IS NOT NULL
Obtendrá el siguiente resultado de la consulta:
ID del Producto | nombre del producto | precio |
---|---|---|
2 | Silla | 5.00 |
8 | Lámpara | 15.00 |
GO TO FULL VERSION