4.1 Agrupación de columnas

Lo que también es muy importante es que si agrupa registros, en la sección SELECTsolo puede especificar las columnas por las que se agrupan los datos.

no puedoescriba una consulta de tipo y especifique la SELECTcolumna de nombre en la sección :

SELECT brand, name
FROM product
GROUP BY brand

Tiene un montón de filas en la tabla de productos con el campo de nombre y no está claro qué fila necesita sustituir aquí. Piénsalo de nuevo: ¿quieres saber la cantidad de productos de cada marca y cómo la tabla resultante puede obtener el nombre del producto?

Si usa el operador GROUP BY, entonces las filas normales no pueden ingresar a su resultado, sino solo las columnas por las cuales se agrupan los datos y las "columnas calculadas", comoCOUNT(*)

4.2 Agrupación por columnas calculadas

Pero puede agrupar por varias columnas e incluso por columnas calculadas. Ejemplo:

SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year

Y el resultado de esta consulta:

año_alquiler total
2012 1
2013 1
2014 1
2015 2
2018 1

Analicemos nuestra solicitud.

En la tabla de empleados , cada empleado tiene una fecha de contratación única, por lo que agrupar los datos por ella no funcionará; habrá un registro para cada fecha y la agrupación no tendrá mucho sentido. Pero si pasamos de la fecha de contratación al año de contratación, entonces bien puede ser una situación en la que la empresa contrató a varios empleados en el mismo año.

Veamos nuevamente cómo se verá esta tabla antes de agrupar:

SELECT
 	id,
 	name,
 	YEAR(join_date) AS hire_year,
 	join_date
FROM employee

Y el resultado de esta consulta:

identificación nombre año_alquiler Fecha de Ingreso
1 ivanov ivan 2012 2012-06-30
2 petrov petr 2013 2013-08-12
3 Sergey Ivanov 2014 2014-01-01
4 Rabinovich Moisha 2015 2015-05-12
5 Anastasia Kirienko 2015 2015-10-10
6 Vaska 2018 2018-11-11

Pero esta tabla resultante se puede agrupar por contrat_año y averiguar cuántas personas fueron contratadas en un año en particular.

4.3 Agrupación por varias columnas

Ahora tratemos de averiguar cuántos empleados contratamos cada mes de cada año. Para hacer esto, necesitamos agregar no uno, sino dos campos calculados a la consulta a la vez: el año de contratación (hire_year) y el mes de contratación (hire_month).

Escribamos una consulta como esta:

SELECT
 	id,
 	name,
 	YEAR(join_date) AS hire_year,
 	MONTH(join_date) AS hire_month,
 	join_date
FROM employee

Y el resultado de esta consulta:

identificación nombre año_alquiler mes_alquiler Fecha de Ingreso
1 ivanov ivan 2012 6 2012-06-30
2 petrov petr 2013 8 2013-08-12
3 Sergey Ivanov 2014 1 2014-01-01
4 Rabinovich Moisha 2015 5 2015-05-12
5 Anastasia Kirienko 2015 10 2015-10-10
6 Vaska 2018 once 2018-11-11

Si agrupamos los datos en esta tabla de resultados por mes, simplemente agrupamos a las personas en grupos, independientemente del año en que fueron contratadas. Y necesitamos que la tabla resultante tenga tres columnas: año, mes y número de empleados contratados.

Para hacer esto, después del operador, GROUP BYdebe usar el nombre de no una columna, sino dos. Ejemplo:

SELECT
 	YEAR(join_date) AS hire_year,
 	MONTH(join_date) AS hire_month,
 	COUNT(*) AS total
FROM employee
GROUP BY hire_year, hire_month

Y el resultado de esta consulta:

año_alquiler mes_alquiler total
2012 6 1
2013 8 1
2014 1 1
2015 5 1
2015 10 1
2018 once 1

Tenemos pocos registros en la tabla, por lo que hay unidades en todas partes de la columna total. Y por cierto, tenga en cuenta que cuantas más columnas agrupemos, más filas tendremos en el resultado.