Gerador de consultas SQL: da pergunta em português à query testada
Escrever de cabeça o JOIN certo ou uma função de janela leva tempo, e um GROUP BY errado gera números que parecem certos, mas não são. Cole a estrutura das suas tabelas e faça a pergunta em português. Seu agente do todo.is escreve uma query comentada para o seu banco, roda em dados de exemplo no workspace dele e mostra o resultado.
O prompt
- Escreva uma consulta SQL para [TIPO DE BANCO DE DADOS] que responda: [SUA PERGUNTA]. Minhas tabelas: [ESTRUTURA DAS TABELAS]. Comente cada parte, use aliases claros e evite o que ficaria lento em [TAMANHO DAS TABELAS]. Crie um pequeno conjunto de dados de exemplo igual às minhas tabelas, rode a consulta nele no seu workspace e me mostre o resultado, para eu ver que funciona. Se algo na minha pergunta for ambíguo (como contar devoluções), me diga o que você assumiu.
O que mudar
- [TIPO DE BANCO DE DADOS]: Por exemplo "PostgreSQL 15", "MySQL 8", "SQL Server", "SQLite", "BigQuery" ou "Snowflake".
- [SUA PERGUNTA]: Em português, por exemplo "os 10 clientes com maior faturamento nos últimos 90 dias, com o número de pedidos".
- [ESTRUTURA DAS TABELAS]: Cole os CREATE TABLE ou liste tabelas e colunas, por exemplo "pedidos(id, cliente_id, total, status, criado_em)". Ou anexe um arquivo com o schema.
- [TAMANHO DAS TABELAS]: Número aproximado de linhas, por exemplo "pedidos tem 20 milhões de linhas", ou "pequenas, menos de 100 mil linhas".
Exemplo de resultado
- Os 10 clientes com maior faturamento, últimos 90 dias (PostgreSQL)
- -- Pedidos pagos dos últimos 90 dias, descontando devoluções
- WITH recentes AS (
- SELECT p.cliente_id,
- p.id AS pedido_id,
- p.total - COALESCE(d.valor, 0) AS total_liquido
- FROM pedidos p
- LEFT JOIN devolucoes d ON d.pedido_id = p.id -- mantém pedidos sem devolução
- WHERE p.status = 'pago'
- AND p.criado_em >= now() - interval '90 days'
- )
- SELECT c.id,
- c.nome,
- COUNT(*) AS pedidos,
- SUM(r.total_liquido) AS faturamento
- FROM recentes r
- JOIN clientes c ON c.id = r.cliente_id
- GROUP BY c.id, c.nome
- ORDER BY faturamento DESC
- LIMIT 10;
- O que cada parte faz
- • WITH recentes AS (...) separa primeiro os pedidos que interessam, e a consulta principal fica legível
- • LEFT JOIN devolucoes mantém os pedidos que nunca tiveram devolução; o COALESCE transforma a devolução ausente em 0
- • GROUP BY c.id, c.nome gera uma linha por cliente; agrupar pelo id evita juntar dois clientes com o mesmo nome
- • ORDER BY faturamento DESC LIMIT 10 fica com os 10 primeiros
- Teste (500 pedidos fictícios, 60 clientes)
- • 1. Bicicletas Norte: 14 pedidos, 8.920,00
- • 2. Estúdio Jacarandá: 9 pedidos, 7.410,50
- • 3. Ipê & Cia: 11 pedidos, 6.985,00
- Premissas
- • "Faturamento" = pedidos pagos menos devoluções; pedidos pendentes e cancelados ficam de fora
- • No máximo uma devolução por pedido. Se houver várias, some as devoluções por pedido antes
- Desempenho com 20 milhões de linhas
- • Um índice em pedidos (status, criado_em) deixa o WHERE pular as linhas antigas
- • Rode um EXPLAIN ANALYZE antes de usar em um dashboard
Como fazer com o todo.is
- Copie o prompt e preencha o tipo de banco, a sua pergunta e as suas tabelas.
- Cole os CREATE TABLE, ou anexe uma exportação do schema, na tela Hoje do todo.is.
- Seu agente escreve a consulta, roda em dados de exemplo realistas e mostra a tabela de resultado.
- Copie a consulta (ou baixe o arquivo .sql) e rode na sua própria ferramenta de banco de dados.
- Mande de volta qualquer mensagem de erro ou número estranho e ele corrige a consulta.
Dicas para um resultado melhor
- Sempre diga qual é o banco. Funções de data, LIMIT ou TOP e tratamento de texto mudam entre PostgreSQL, MySQL, SQL Server e BigQuery.
- Compartilhe a estrutura, não os dados. Nomes e tipos das colunas bastam para escrever uma consulta correta.
- Defina palavras ambíguas como "cliente ativo" ou "faturamento" na pergunta; a maioria dos números errados vem de definições pouco claras.
- Teste consultas novas com um usuário só de leitura ou numa cópia do banco antes de rodar UPDATE ou DELETE.
- Se precisa do mesmo relatório toda semana, transforme em tarefa recorrente: o agente refaz as checagens e te manda as observações por e-mail.
gerador de consultas SQL: perguntas frequentes
- Ele conecta no meu banco de dados e roda a consulta? Não. Ele não acessa o seu banco. Roda a consulta em dados de exemplo no próprio workspace, e você roda a versão final na sua ferramenta.
- Qual a diferença entre WHERE e HAVING? O WHERE filtra linhas antes do agrupamento; o HAVING filtra grupos depois da agregação. Por exemplo, HAVING COUNT(*) > 5 mantém só os clientes com mais de 5 pedidos.
- Ele explica ou acelera uma consulta lenta que já tenho? Sim. Cole a consulta e, se puder, o resultado do EXPLAIN. Ele aponta índices que faltam, subconsultas desnecessárias ou funções em colunas indexadas, e reescreve.
- É seguro colar o meu schema? O schema fica no seu próprio espaço de trabalho do agente e só ele usa. Deixe de fora dados reais e senhas; não são necessários.
JavaScript is required to use the todo.is app.