4.1 Agrupando colunas

O que também é muito importante é que, se você agrupar registros, na seção SELECTpoderá especificar apenas as colunas pelas quais os dados são agrupados.

Vocênão podeescreva uma consulta de tipo e especifique a SELECTcoluna de nome na seção :

SELECT brand, name
FROM product
GROUP BY brand

Você tem várias linhas na tabela de produtos com o campo name e não está claro qual linha você precisa substituir aqui. Pense novamente: você quer saber a quantidade de produtos de cada marca e como a tabela resultante pode obter o nome do produto?

Se você usar o operador GROUP BY, as linhas normais não poderão entrar no seu resultado, mas apenas colunas pelas quais os dados são agrupados e “colunas calculadas”, comoCOUNT(*)

4.2 Agrupamento por colunas calculadas

Mas você pode agrupar por várias colunas e até por colunas calculadas. Exemplo:

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

E o resultado desta consulta:

contrato_ano total
2012 1
2013 1
2014 1
2015 2
2018 1

Vamos analisar nosso pedido.

Na tabela de funcionários , cada funcionário tem uma data de admissão única, então agrupar os dados por ela não vai funcionar - haverá um registro para cada data e o agrupamento não fará muito sentido. Mas se passarmos da data de contratação para o ano de contratação, então pode muito bem ser uma situação em que a empresa contratou vários funcionários no mesmo ano.

Vamos ver novamente como ficará essa tabela antes de agrupar:

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

E o resultado desta consulta:

eu ia nome contrato_ano data de afiliação
1 Ivanov Ivan 2012 30/06/2012
2 Petrov Petr 2013 12/08/2013
3 Ivanov Sergei 2014 2014-01-01
4 Rabinovich Moisha 2015 2015-05-12
5 Kirienko Anastácia 2015 2015-10-10
6 Vaska 2018 2018-11-11

Mas essa tabela resultante pode ser agrupada por emprega_ano e descobrir quantas pessoas foram contratadas em um determinado ano.

4.3 Agrupamento por várias colunas

Agora vamos tentar descobrir quantos funcionários contratamos em cada mês de cada ano. Para fazer isso, precisamos adicionar não um, mas dois campos calculados à consulta de uma só vez - o ano de contratação (hire_year) e o mês de contratação (hire_month).

Vamos escrever uma consulta como esta:

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

E o resultado desta consulta:

eu ia nome contrato_ano contrato_mês data de afiliação
1 Ivanov Ivan 2012 6 30/06/2012
2 Petrov Petr 2013 8 12/08/2013
3 Ivanov Sergei 2014 1 2014-01-01
4 Rabinovich Moisha 2015 5 2015-05-12
5 Kirienko Anastácia 2015 10 2015-10-10
6 Vaska 2018 onze 2018-11-11

Se agruparmos os dados desta tabela de resultados por mês, simplesmente agrupamos as pessoas em grupos, independentemente do ano em que foram contratadas. E precisamos que a tabela resultante tenha três colunas: ano, mês e número de funcionários contratados.

Para fazer isso, depois do operador, GROUP BYvocê precisa usar o nome não de uma coluna, mas de duas. Exemplo:

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

E o resultado desta consulta:

contrato_ano contrato_mês total
2012 6 1
2013 8 1
2014 1 1
2015 5 1
2015 10 1
2018 onze 1

Temos poucos registros na tabela, então há unidades em toda a coluna total. A propósito, observe que quanto mais colunas agruparmos, mais linhas teremos no resultado.