Código SQL copiado para a área de transferência
RU EN FR

Aula 4.2: Agrupando Dados com GROUP BY em SQL

O agrupamento de dados é uma ferramenta fundamental para análise e sumarização em SQL. A cláusula GROUP BY permite combinar linhas com os mesmos valores em colunas especificadas e aplicar funções de agregação a cada grupo. Nesta lição, você aprenderá a usar o GROUP BY para relatórios e análise de dados com exemplos do banco de dados Sakila.

Noções Básicas de Uso do GROUP BY

Sintaxe

SELECT column1, AGG_FUNCTION(column2)
FROM table
GROUP BY column1;

Regra importante

Ao usar GROUP BY, toda coluna selecionada em SELECT deve:

  • ou estar incluída na cláusula GROUP BY;
  • ou estar envolvida por uma função de agregação (SUM, COUNT, AVG, MIN, MAX, etc.).

Exemplo: Total de pagamentos por cliente

SELECT customer_id, SUM(amount) AS total_paid
FROM payment
GROUP BY customer_id;

Resultado: Retorna o identificador do cliente e o valor total dos pagamentos para cada cliente.

Exemplo: Número de pagamentos por funcionário

SELECT staff_id, COUNT(*) AS payments_count
FROM payment
GROUP BY staff_id;

Resultado: Retorna o identificador do funcionário e a quantidade de pagamentos processados por cada funcionário.

Exemplo: Pagamento médio por data

SELECT DATE(payment_date) AS pay_date, AVG(amount) AS avg_payment
FROM payment
GROUP BY DATE(payment_date);

Resultado: Retorna o valor médio dos pagamentos para cada data.

Variante: GROUP BY com alias

SELECT DATE(payment_date) AS pay_date, AVG(amount) AS avg_payment
FROM payment
GROUP BY pay_date;

Essa variante funciona em MySQL/MariaDB, onde é permitido usar alias no GROUP BY. Porém, esse comportamento não é universal em todos os SGBDs e não é considerado SQL padrão portável. Para consultas entre diferentes SGBDs, é mais seguro usar a forma completa GROUP BY DATE(payment_date).

Usando GROUP BY com Múltiplas Colunas

Você pode agrupar dados por várias colunas ao mesmo tempo para uma análise mais detalhada.

Exemplo: Total de pagamentos por funcionário e cliente

SELECT staff_id, customer_id, SUM(amount) AS total_paid
FROM payment
GROUP BY staff_id, customer_id;

Resultado: Retorna o identificador do funcionário, o identificador do cliente e o valor total dos pagamentos para cada par funcionário-cliente.

Aplicações Práticas

  1. Análise de vendas por categoria de filme:
    SELECT c.name AS category, SUM(p.amount) AS total_sales
    FROM payment p
    JOIN rental r ON p.rental_id = r.rental_id
    JOIN inventory i ON r.inventory_id = i.inventory_id
    JOIN film f ON i.film_id = f.film_id
    JOIN film_category fc ON f.film_id = fc.film_id
    JOIN category c ON fc.category_id = c.category_id
    GROUP BY c.name;
    
  2. Número de clientes por país:
    SELECT co.country, COUNT(*) AS customers_count
    FROM customer cu
    JOIN address a ON cu.address_id = a.address_id
    JOIN city ci ON a.city_id = ci.city_id
    JOIN country co ON ci.country_id = co.country_id
    GROUP BY co.country;
    

Principais Conclusões desta Lição

A cláusula GROUP BY permite agrupar dados e aplicar funções de agregação a cada grupo. É uma ferramenta poderosa para relatórios e análise de dados em SQL. Pratique o uso do GROUP BY com exemplos do banco de dados Sakila para obter rapidamente dados resumidos e construir consultas analíticas.