Uso de GROUP BY [MySQL][base de datos]

Uso de GROUP BY

El papel de GROUP BY:

Dividir datos en una tabla en grupos

A continuación, usamos algunos ejemplos para comprender la operación de agrupación GROUP BY

ej.1: Consultar el salario medio de cada departamento de la empresa, y el salario más alto de cada departamento de la empresa

SELECT employees_id,AVG(salary),SUM(salary)
FROM employees
GROUP BY department_id;
  • En este momento, agrupamos según el departamento_id (es decir, el id del departamento) en la tabla, y luego obtuvimos el salario promedio y el salario máximo en cada grupo a través de la función de agregación (función de agrupación).

eg2: consulta el salario promedio de cada job_id (tipo de trabajo)

SELECT job_id,AVG(salary),SUM(salary)
FROM employees
GROUP BY job_id;
  • En este momento, agrupamos según el job_id (es decir, el tipo de trabajo) en la tabla, y luego obtuvimos el salario promedio y el salario máximo en cada grupo a través de la función de agregación (función de agrupación).

Anteriormente, todos agrupábamos en un solo campo, expliquemos cómo usar varias columnas para agrupar

¿Qué es agrupar usando varias columnas?

  • Por ejemplo: si ordenamos el campo id_departamento y el campo id_de trabajo por varias columnas, los registros con el mismo id_departamento y id_de trabajo se agrupan en un grupo

A continuación, usamos un ejemplo para comprender la operación de agrupación en varias columnas.

por ejemplo: consulta el salario promedio debajo de cada job_id en cada departamento_id (hay dos formas de resolver este problema aquí :)

método uno:

SELECT department_id,job_id,AVG(salary)
FROM employees
GROUP BY department_id,job_id;

Método dos:

SELECT department_id,job_id,AVG(salary)
FROM employees
GROUP BY job_id,department_id;
  • Estos dos métodos en realidad pueden resolver este problema, uno es poner department_id al frente en la cláusula GROUP BY, el otro es poner job_id al frente
    • De hecho, poner id_departamento al frente es encontrar el salario promedio debajo de cada id_trabajo en cada id_departamento, mientras que poner id_trabajo al frente y id_departamento atrás es encontrar el salario promedio debajo de cada id_departamento en cada id_trabajo, pero analizamos estos dos problemas Más tarde, se puede encontrar que en realidad es un problema, por lo que estos dos métodos pueden resolver este problema

Análisis de posibles problemas en el uso de GROUP BY para operaciones de agrupación:

Manera incorrecta uno:

SELECT department_id,job_id,AVG(salary)
FROM BY department_id;
  • De esta manera, analizamos de acuerdo con department_id. En este momento, cada departamento se puede dividir en un grupo. Si hay 20 departamentos en este momento, entonces consultaremos 20 campos en este momento, pero estamos ejecutando la operación de consulta. También consulte job_id, puede haber múltiples job_id (tipo de trabajo) en un departamento, entonces, ¿cómo puede un registro mostrar el valor de múltiples job_id en este momento?
    • En este momento obviamente no se muestra, es decir, este método está mal, si intentamos ejecutarlo en Oracle, podemos encontrar que no se puede ejecutar en este momento, si está en MySQL en este momento, puede ejecutarse en este momento. , pero solo se muestra un job_id en cada departamento_id en el resultado de la ejecución, es decir, incluso si se puede ejecutar en MySQL, el resultado de la ejecución es incorrecto

Conclusión: los campos de funciones que no agrupan que aparecen en SELECT deben declararse en GROUP BY, pero los campos declarados en GROUP BY pueden no aparecer en SELECT

Suplemento 1:

La declaración GROUP BY está después de FROM, después de WHERE, antes de ORDER, antes de LIMIT

Suplemento dos:

Uso de WITH ROLLUP en GROUP BY en MySQL (El uso de WITH ROLLUP después de este GROUP BY es una característica nueva)

  • El efecto después de usar CON ROLLUP:
  • Agregue un registro después de todos los registros del grupo consultado, el registro se calcula después de todas las combinaciones y se convierte en un grupo grande

Aquí usamos un ejemplo para entender el uso de CON ROLLUP

SELECT department_id,job_id,AVG(salary)
FROM employees
GROUP BY department_id WITH ROLLUP;
  • En este momento se usa group by para agrupar el salario promedio en cada departamento, pero podemos encontrar que hemos sumado con rollup after group by, luego en este momento, se agregará después del salario promedio en cada departamento consultado. registro, este registro muestra el salario promedio de todos los empleados de la empresa. En este momento, todos los grupos se fusionan en un gran grupo, es decir, todos los empleados de la empresa se dividen en un grupo y luego operan en este grupo, Encuentre el salario promedio, luego encuentre el salario promedio de todos los empleados de la empresa

Suplemento tres:

Cuando se usa with rollup, no puede usar la cláusula order by para ordenar al mismo tiempo, es decir, with rollup y order by son mutuamente excluyentes.

  • Es decir, cuando usamos order by para ordenar los resultados de la consulta, cuando usamos group by grouping, no podemos agregar con rollup after group by.

Supongo que te gusta

Origin blog.csdn.net/m0_57001006/article/details/123701066
Recomendado
Clasificación