Este tutorial faz parte da série Aprenda consultas básicas de SQL usando MySQL. Neste tutorial, discutiremos consultas SQL para realizar o agrupamento das linhas da tabela no MySQL usando a cláusula GROUP BY com as funções agregadas. Você também pode seguir Using Aggregate Functions (SUM, AVG, MAX, MIN, COUNT, DISTINCT) no MySQL para aprender as funções agregadas.
Agrupar por consulta
O GRUPO POR cláusula pode ser usada para realizar o agrupamento das linhas da tabela. Também pode ser usado com as funções agregadas para gerar os relatórios e coletar dados estatísticos.
# GROUP BY - Syntax
SELECT column_1, column_2, ..., [<aggregate function> AS <column>] FROM `table_name` GROUP BY column_1, column_2, ...;
Explicação da consulta
O GRUPO POR A cláusula pode ser usada para agrupar as linhas especificando as colunas para formar o conjunto de linhas.
Podemos usar funções agregadas para usar efetivamente a cláusula GROUP BY para gerar os relatórios e coletar dados estatísticos.
O agrupamento pode ser aplicado em várias colunas onde a primeira coluna formará o grupo primário e as colunas subsequentes formarão subgrupos.
Exemplos
Esta seção fornece exemplos para realizar o agrupamento usando a cláusula GROUP BY com e sem funções de agregação. Use a consulta mencionada abaixo para criar a tabela de usuário com o id, nome, sobrenome, idade e colunas ativas para armazenar os dados do usuário.
# Create the User Table
CREATE TABLE `enterprise`.`user` (
`user_id` BIGINT NOT NULL,
`first_name` VARCHAR(45) ,
`last_name` VARCHAR(45),
`age` SMALLINT(6) NOT NULL DEFAULT 0,
`active` TINYINT(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`user_id`));
A consulta abaixo mencionada pode ser usada para inserir dados de teste na tabela do usuário.
# Insert Rows - All Columns
INSERT INTO `user` ( `user_id`, `first_name`, `last_name`, `age`, `active` ) VALUES
( 1, 'John', 'Smith', 18, 1 ),
( 2, 'Rick', 'Jones', 19, 1 ),
( 3, 'John', 'Ponting', 16, 0 ),
( 4, 'Harsh', 'Upadhyay', 20, 1 ),
( 5, 'Tajwinder', 'Singh', 18, 0 );
A consulta acima mencionada irá inserir 5 linhas na tabela com o id, primeiro nome, sobrenome e colunas ativas para representar 5 usuários diferentes.
Agora vamos usar a cláusula GROUP BY sem as funções agregadas para agrupar as linhas. Isso pode ser feito usando a cláusula GROUP BY no MySQL como mostrado abaixo.
# GROUP BY - Generate the set of active values
SELECT active from user GROUP BY active;
# Result
1
0
# GROUP BY - Generate the set of first name
SELECT first_name from user GROUP BY first_name;
# Result
John
Rick
Harsh
Tajwinder
As consultas mencionadas acima retornaram o conjunto de resultados agrupando as linhas usando a cláusula GROUP BY. Agora vamos agrupar as linhas com a função de agregação conforme mostrado abaixo.
# GROUP BY - Get the maximum age of all users with specific first name
SELECT first_name, MAX(age) AS max_age from user GROUP BY first_name;
# Result
John 18
Rick 19
Harsh 20
Tajwinder 18
# GROUP BY - Get the average age of all users with specific first name
SELECT first_name, AVG(age) AS avg_age from user GROUP BY first_name;
# Result
John 17.0000
Rick 19.0000
Harsh 20.0000
Tajwinder 18.0000
É assim que podemos usar a cláusula GROUP BY com e sem as funções de agregação para agrupar as linhas da tabela para as colunas específicas.