Rullst AcademyRullst Academy/Lição
Bancos de dados e SQL I · Lição 08 / 12

Resumir e contar com cuidado

Usar GROUP BY, COUNT, SUM, COALESCE e HAVING sem esconder grupos vazios.

Trilhas de aprendizado18 min

Vamos descobrir juntos

  1. 1

    GROUP BY reúne linhas para resumir por material. Agrupe por identidade; só label juntaria os dois Orbit. Inclua no agrupamento as colunas exibidas que não são agregadas, evitando depender de valores arbitrários.

  2. 2

    COUNT(*) conta linhas, inclusive a linha preservada sem correspondência do LEFT JOIN. COUNT(l.id) ignora NULL e conta empréstimos relacionados. SUM(l.units) soma unidades, diferente de contar empréstimos.

  3. 3

    SUM sem valores retorna NULL no SQLite. COALESCE(SUM(l.units),0) usa zero para ausência de empréstimos abertos. Essa interpretação é específica do relatório; não transforme automaticamente todo dado desconhecido em zero.

  4. 4

    WHERE filtra linhas antes do agrupamento; HAVING filtra grupos. Confira o relatório completo antes de pedir disponibilidade menor ou igual a zero. Preserve números negativos: eles podem revelar inconsistência.

Sua bancada de dados

Nosso modelo: kits.id ← loans.kit_id. Um material pode ter vários empréstimos; nomes podem repetir. Só usamos dados fictícios.

Preveja antes de abrir a referência. Ela mostra o resultado verificado do exemplo original, não executa seu texto. Para executar suas alterações, use o kit no computador.

-- Resumir e contar com cuidado
SELECT k.id, COUNT(l.id) AS open_loans, COALESCE(SUM(l.units),0) AS open_units FROM kits AS k LEFT JOIN loans AS l ON l.kit_id=k.id AND l.returned IS NULL GROUP BY k.id ORDER BY k.id;
Comparar com o resultado de referência
[
  {
    "columns": [
      "id",
      "open_loans",
      "open_units"
    ],
    "rows": [
      [
        1,
        1,
        1
      ],
      [
        2,
        1,
        2
      ],
      [
        3,
        1,
        1
      ],
      [
        4,
        0,
        0
      ]
    ]
  }
]

No terminal da pasta extraída, execute o comando. Use python3 no macOS/Ubuntu ou py se esse for seu launcher no Windows. Cada execução começa em memória; leia README.md para salvar arquivos e ensaiar recuperação.

python lab.py run lesson.sql
Meus arquivos e GitHub

O editor guarda seu rascunho .sql neste navegador. Baixe a edição e substitua lesson.sql no kit; no projeto final, availability.sql. O ZIP continua sendo o modelo original. Publicar no GitHub envia apenas o arquivo confirmado, sem executar SQL ou enviar o banco.

Links oficiais e próximo passo

✦
SUA MISSÃO

Usar GROUP BY, COUNT, SUM, COALESCE e HAVING sem esconder grupos vazios.

Agora é a sua vez

Oficina de descobertas

Leia, preveja e confira

Usar GROUP BY, COUNT, SUM, COALESCE e HAVING sem esconder grupos vazios.
Monte suas respostas e confira quando estiver pronto.
Uma pausa para entender

Qual expressão conta empréstimos no LEFT JOIN?

Preciso de uma pista

COUNT(*) conta linhas, inclusive a linha preservada sem correspondência do LEFT JOIN. COUNT(l.id) ignora NULL e conta empréstimos relacionados. SUM(l.units) soma unidades, diferente de contar empréstimos.

Carregando sua jornada…

Leve com você

Compare COUNT(*) e COUNT(l.id) para Nova. Depois selecione grupos com mais de uma unidade aberta e explique cada linha.

No seu ritmo

Meus arquivos e GitHub

Toda lição pode virar um registro seu: código, anotações ou um plano de prática. Guardar um arquivo no GitHub é opcional e não altera seu XP.

Manual do aluno

O editor e os downloads abrem quando esta lição estiver liberada para sua conta. Confira o acesso abaixo ou volte ao mapa da trilha.

Conferindo seu acesso à lição…

Rullstpetbot

A IA pode errar. Confira no material da lição.