Noções Básicas de SQL Avançado
9 exemplos para você começar com SQL avançado - 6 básicos e 3 intermediários.
Busque em todas as páginas da documentação
9 exemplos para você começar com SQL avançado - 6 básicos e 3 intermediários.
Conforto com JOIN e GROUP BY da seção Consultas SQL.
# Desenvolvimento local com Docker (PostgreSQL 18)
docker run -d --name pg18 -e POSTGRES_PASSWORD=dev -p 5432:5432 postgres:18
psql postgres://postgres:dev@localhost:5432/postgresNomeie etapas intermediárias.
WITH recent AS (
SELECT * FROM app.orders WHERE created_at > now() - interval '7 days'
)
SELECT account_id, count(*) FROM recent GROUP BY 1;Classifique sem o colapso do GROUP BY.
SELECT id, account_id,
row_number() OVER (PARTITION BY account_id ORDER BY created_at DESC) AS rn
FROM app.orders;Compare com o evento anterior por partição.
SELECT id, total,
lag(total) OVER (PARTITION BY account_id ORDER BY id) AS prev_total
FROM app.orders;Contagens condicionais em uma única passagem.
SELECT account_id,
count(*) FILTER (WHERE total > 100) AS big_orders
FROM app.orders GROUP BY 1;Alinhe CTEs e JOINs.
WITH open_orders AS (
SELECT * FROM app.orders WHERE status = 'open'
)
SELECT a.name, o.total
FROM open_orders o
JOIN app.accounts a ON a.id = o.account_id;Comentários SQL para regras de negócio não óbvias.
-- Receita reconhecida apenas para pedidos enviados
SELECT sum(total) FROM app.orders WHERE status = 'shipped';Linha de base antes do ajuste.
EXPLAIN (ANALYZE, BUFFERS)
WITH x AS (SELECT account_id, sum(total) s FROM app.orders GROUP BY 1)
SELECT * FROM x WHERE s > 1000;Subconsulta correlacionada por linha.
SELECT a.id, latest.total
FROM app.accounts a
JOIN LATERAL (
SELECT total FROM app.orders o
WHERE o.account_id = a.id ORDER BY created_at DESC LIMIT 1
) latest ON true;Agregação condicional pivotada.
SELECT account_id,
sum(total) FILTER (WHERE status='open') AS open_total,
sum(total) FILTER (WHERE status='closed') AS closed_total
FROM app.orders GROUP BY 1;Versões do Stack: Esta página foi escrita para PostgreSQL 18.4 (estável 18, manutenção 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x e PostGIS 3.5+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026