https://www.canva.com/design/DAGg5WR5naY/EwTG-g3E_R9SqNEJCLYjww/view?embed

Primeiro vamos aprender a conectar com o postgres?

postgresql://abdb_user:NmKsxGQnVZqnpCZv9L0xIfFCTseiIVL4@dpg-cv51m57noe9s73ecs32g-a.oregon-postgres.render.com/abdb

Vamos descobrir o que tem neste banco de dados?


1. Consulta usando CTE com cálculo de total de compras

Este exemplo utiliza uma CTE (Common Table Expression) para extrair o valor total dos pedidos por cliente e depois faz uma seleção adicional. Em seguida, usamos EXPLAIN ANALYZE para analisar seu desempenho.

EXPLAIN ANALYZE
WITH total_por_cliente AS (
    SELECT
        c.id AS cliente_id,
        c.nome AS cliente,
        SUM(pr.preco * p.quantidade) AS valor_total
    FROM pedidos p
    JOIN clientes c ON p.cliente_id = c.id
    JOIN produtos pr ON p.produto_id = pr.id
    GROUP BY c.id, c.nome
)
SELECT
    cliente_id,
    cliente,
    valor_total
FROM total_por_cliente
WHERE valor_total > 5000
ORDER BY valor_total DESC;

O que faz?

  1. CTE total_por_cliente:
  2. Consulta final:
  3. EXPLAIN ANALYZE:

2. Usando função de janela para rankear clientes

Agora, vamos demonstrar o uso de funções de janela (window functions) para rankear clientes de acordo com o valor total de compras e EXPLAIN ANALYZE:

EXPLAIN ANALYZE
SELECT
    c.id AS cliente_id,
    c.nome AS cliente,
    SUM(pr.preco * p.quantidade) AS valor_total,
    RANK() OVER (ORDER BY SUM(pr.preco * p.quantidade) DESC) AS rank_valor
FROM pedidos p
JOIN clientes c ON p.cliente_id = c.id
JOIN produtos pr ON p.produto_id = pr.id
GROUP BY c.id, c.nome
ORDER BY rank_valor;

O que faz?