4.1 Agrupación de columnas
Lo que también es muy importante es que si agrupa registros, en la sección SELECT
solo puede especificar las columnas por las que se agrupan los datos.
Túno puedoescriba una consulta de tipo y especifique la SELECT
columna 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 BY
debe 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.