Comandos de Agregação
Marcelo T. Pereira
Atualizado: abr-2023
Banco Dados
Antes de Tudo
2
O Pensador - Auguste Rodin
Imagem: https://www.youtube.com/watch?v=gG9SqKH8l7c
Propor Soluções
3
https://dba.stackexchange.com/help/minimal-reproducible-example
https://en.wikipedia.org/wiki/Minimal_reproducible_example
Resumo
4
01
O que será mostrado na resposta.
SELECT <col1>, <col2>, ...
SELECT
08
Apresentar um limite máximo.
LIMIT <vlr_inicial>, <total_vlrs>
LIMIT
02
De onde pegar os dados.
FROM <nome_tabela>
FROM
05
Agrupamento das respostas.
GROUP BY <col1>, <col2>...
GROUP BY
03
Como unir tabelas.
JOIN <nome_tabela> ON <pk=fk>
JOIN .. ON
04
Filtrar os resultados
WHERE <expressao_booleana>
WHERE
06
Filtrar agrupamentos.
HAVING <funcao> ( <coluna> )..
HAVING
07
Ordenar a resposta (asc, desc).
ORDER BY <col1>, <col2>...
ORDER BY
Mercearia 🛒
5
dbMercearia -> https://gist.github.com/marcelo-trier/1934521092b0f9a2a601fee0c16450ed
Agregação - Agrupamento
6
Agregação - Exemplo
7
Imagem: https://data36.com/sql-functions-beginners-tutorial-ep3/
Exemplo prático agregação
8
SELECT country_id, COUNT(id)
FROM city
GROUP BY country_id;
Imagem: http://learnsql.com
Como é feita Agregação?
Qual função de agregação está sendo executado no Apply?
9
Agrupando dados da Mercearia
10
SELECT cliente
FROM tbVenda
GROUP BY cliente;
SELECT cliente, GROUP_CONCAT(DISTINCT produto)
FROM tbVenda
GROUP BY cliente
ORDER BY cliente;
SELECT cliente, SUM(quantidade)
FROM tbVenda
WHERE produto = 'queijo'
GROUP BY cliente;
-- AGRUPAMENTOS: GROUP BY <atributo_agrupado>
-- OBS: todos outros atributos na consulta devem receber algum comando de AGREGACAO
-- comandos agregação: SUM, MAX, MIN, AVG, COUNT, GROUP_CONCAT, etc...
Toda vez que tivermos um AGRUPAMENTO e for necessário mostrar dados de outra(s) coluna(s), será preciso alguma Função de Agregação!
Agregação - Exercícios em sala
11
Filtrando resultados agrupados
12
-- HAVING: filtro de algum resultado AGRUPADO
-- ex: quem comprou mais que 5 kilos de queijo
SELECT cliente, SUM(quantidade)
FROM tbVenda
WHERE produto = 'queijo'
GROUP BY cliente
HAVING SUM(quantidade) > 5;
SELECT cliente, SUM(quantidade) AS sum_qtde
FROM tbVenda
WHERE produto = 'queijo'
GROUP BY cliente
HAVING sum_qtde > 5;
LIMIT -- número de respostas
13
-- LIMIT <inicio, total_registros>
SELECT *
FROM tbVenda
LIMIT 3;
SELECT *
FROM tbVenda
LIMIT 4, 10;
Exercícios
14
Treine ->
https://www.w3resource.com/mysql-exercises/
https://www.hackerrank.com/
Resumo
15
01
O que será mostrado na resposta.
SELECT <col1>, <col2>, ...
SELECT
08
Apresentar um limite máximo.
LIMIT <vlr_inicial>, <total_vlrs>
LIMIT
02
De onde pegar os dados.
FROM <nome_tabela>
FROM
05
Agrupamento das respostas.
GROUP BY <col1>, <col2>...
GROUP BY
03
Como unir tabelas.
JOIN <nome_tabela> ON <pk=fk>
JOIN .. ON
04
Filtrar os resultados
WHERE <expressao_booleana>
WHERE
06
Filtrar agrupamentos.
HAVING <funcao> ( <coluna> )..
HAVING
07
Ordenar a resposta (asc, desc).
ORDER BY <col1>, <col2>...
ORDER BY
Referências:
16