1 of 16

Comandos de Agregação

Marcelo T. Pereira

Atualizado: abr-2023

Banco Dados

2 of 16

Antes de Tudo

  • O processo de 'Análise' e a 'Dificuldade' é fundamental para o amadurecimento do pensamento e raciocínio!

  • Este amadurecimento deve ser constante e incremental.

2

O Pensador - Auguste Rodin

Imagem: https://www.youtube.com/watch?v=gG9SqKH8l7c

3 of 16

Propor Soluções

  • SEMPRE utilizar o conceito de código mínimo para seus testes:
    • Código MRE: Mínimo Reproduzível Exemplo, ou
    • Código MCV: Mínimo Completo e Verificável.

  • Ao terminar os testes, junte tudo em uma só solução! 😉

3

https://dba.stackexchange.com/help/minimal-reproducible-example

https://en.wikipedia.org/wiki/Minimal_reproducible_example

4 of 16

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

5 of 16

Mercearia 🛒

  • Continuando com a Mercearia!

5

dbMercearia -> https://gist.github.com/marcelo-trier/1934521092b0f9a2a601fee0c16450ed

6 of 16

Agregação - Agrupamento

  • Como agrupar alguns dados e manipular os outros dados?

6

7 of 16

Agregação - Exemplo

7

Imagem: https://data36.com/sql-functions-beginners-tutorial-ep3/

8 of 16

Exemplo prático agregação

8

SELECT country_id, COUNT(id)

FROM city

GROUP BY country_id;

Imagem: http://learnsql.com

9 of 16

Como é feita Agregação?

Qual função de agregação está sendo executado no Apply?

9

10 of 16

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!

11 of 16

Agregação - Exercícios em sala

  • Qual pessoa mais comprou pão?
  • Quantas pessoas que começam com o nome A que compraram pão!
  • Quantos tipos produtos estão sendo vendidos? Quais são eles?
  • Qual a quantidade de queijo vendido?
  • Quantos e quais clientes estão comprando?
  • Qual dia que teve maior número de vendas?
  • Qual a média de pães vendidos para cada pessoa?
  • Qual dia o alison comprou a maior quantidade de manteiga?
  • Qual dia houve uma venda com maior número de pães?
  • Qual dia que foi vendido o maior número de pães ao total?

11

12 of 16

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;

13 of 16

LIMIT -- número de respostas

13

-- LIMIT <inicio, total_registros>

SELECT *

FROM tbVenda

LIMIT 3;

SELECT *

FROM tbVenda

LIMIT 4, 10;

14 of 16

Exercícios

  • Para mais exercícios:

14

Treine ->

https://www.w3resource.com/mysql-exercises/

https://www.hackerrank.com/

15 of 16

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

16 of 16

Referências:

  • https://dev.mysql.com/doc/refman/8.0/en/
  • https://www.mysqltutorial.org/
  • https://www.w3resource.com/mysql/mysql-tutorials.php
  • https://www.w3schools.com/mysql/default.asp

16

  • Referências: