4.1 Agrupando colunas
O que também é muito importante é que, se você agrupar registros, na seção SELECT
poderá especificar apenas as colunas pelas quais os dados são agrupados.
Vocênão podeescreva uma consulta de tipo e especifique a SELECT
coluna 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 BY
você 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.
GO TO FULL VERSION