Uso de GROUP BY [MySQL][banco de dados]

Uso de GROUP BY

O papel do GROUP BY:

Dividir dados em uma tabela em grupos

Abaixo usamos alguns exemplos para entender a operação de agrupamento GROUP BY

ex.1: Consultar a média salarial de cada departamento da empresa, e o maior salário de cada departamento da empresa

SELECT employees_id,AVG(salary),SUM(salary)
FROM employees
GROUP BY department_id;
  • Neste momento, agrupamos de acordo com o department_id (ou seja, o id do departamento) na tabela, e então obtivemos o salário médio e o salário máximo de cada grupo por meio da função de agregação (função de agrupamento).

ex.2: Consultar o salário médio de cada job_id (tipo de trabalho)

SELECT job_id,AVG(salary),SUM(salary)
FROM employees
GROUP BY job_id;
  • Neste momento, agrupamos de acordo com o job_id (ou seja, o tipo de trabalho) na tabela, e então obtivemos o salário médio e o salário máximo de cada grupo por meio da função de agregação (função de agrupamento).

Anteriormente estávamos todos agrupando em um único campo, vamos explicar como usar várias colunas para agrupar

O que é agrupar usando várias colunas?

  • Por exemplo: se classificarmos o campo department_id e o campo job_id por várias colunas, os registros com o mesmo department_id e job_id serão agrupados em um grupo

Abaixo usamos um exemplo para entender a operação de agrupamento em várias colunas

por exemplo: Consulte o salário médio em cada job_id em cada departamento_id (há duas maneiras de resolver esse problema aqui:)

método um:

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

Método dois:

SELECT department_id,job_id,AVG(salary)
FROM employees
GROUP BY job_id,department_id;
  • Esses dois métodos podem realmente resolver esse problema, um é colocar department_id na frente na cláusula GROUP BY, o outro é colocar job_id na frente
    • Na verdade, colocar department_id na frente é encontrar o salário médio em cada job_id em cada departamento_id, enquanto colocar job_id na frente e department_id atrás é encontrar o salário médio em cada departamento_id em cada job_id, mas analisamos esses dois problemas Mais tarde, pode-se descobrir que é realmente um problema, então esses dois métodos podem resolver esse problema

Análise de possíveis problemas no uso de GROUP BY para operações de agrupamento:

Maneira errada:

SELECT department_id,job_id,AVG(salary)
FROM BY department_id;
  • Desta forma, analisamos de acordo com o department_id. Neste momento, cada departamento pode ser dividido em um grupo. Se houver 20 departamentos neste momento, vamos consultar 20 campos neste momento, mas estamos executando a operação de consulta. Consulte também job_id, pode haver vários job_id (tipo de trabalho) em um departamento, então como um registro pode exibir o valor de vários job_id neste momento?
    • Neste momento, obviamente não é exibido, ou seja, este método está errado. Se tentarmos executá-lo no Oracle, podemos descobrir que ele não pode ser executado neste momento. Se estiver no MySQL neste momento, pode ser executado neste momento. , mas apenas um job_id é exibido em cada departamento_id no resultado da execução, ou seja, mesmo que possa ser executado no MySQL, o resultado da execução está errado

Conclusão: Campos de funções não agrupadas que aparecem em SELECT devem ser declarados em GROUP BY, mas campos declarados em GROUP BY podem não aparecer em SELECT

Suplemento 1:

A instrução GROUP BY vem depois de FROM, depois de WHERE, antes de ORDER, antes de LIMIT

Suplemento dois:

Usando WITH ROLLUP em GROUP BY no MySQL (O uso de WITH ROLLUP após este GROUP BY é um novo recurso)

  • O efeito depois de usar COM ROLLUP:
  • Adicione um registro após todos os registros do grupo consultado, o registro é calculado após todas as combinações e se torna um grande grupo

Aqui usamos um exemplo para entender o uso de WITH ROLLUP

SELECT department_id,job_id,AVG(salary)
FROM employees
GROUP BY department_id WITH ROLLUP;
  • Neste momento, agrupar por é usado para agrupar o salário médio em cada departamento, mas podemos descobrir que adicionamos com rollup após agrupar por, então, neste momento, ele será adicionado após o salário médio em cada departamento consultado. registro, este registro mostra o salário médio de todos os funcionários da empresa. Neste momento, todos os grupos são realmente fundidos em um grande grupo, ou seja, todos os funcionários da empresa são divididos em um grupo e, em seguida, operam nesse grupo, Encontre o salário médio e, em seguida, encontre o salário médio de todos os funcionários da empresa

Suplemento três:

Ao usar com rollup, você não pode usar a cláusula order by para ordenar ao mesmo tempo, ou seja, com rollup e order by são mutuamente exclusivos

  • Ou seja, quando usamos order by para classificar os resultados da consulta, quando usamos group by grouping, não podemos adicionar com rollup após group by.

Acho que você gosta

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