query-builderClaude Skill
Convert natural language questions into SQL queries.
| name | query-builder |
| description | Convert natural language questions into SQL queries. Activates when users ask data questions in plain English like "show me users who signed up last week" or "find orders over $100". |
Query Builder
Convert natural language questions into SQL queries using the database schema.
When to Use
Activate when user asks questions like:
- "Show me all users who signed up last month"
- "Find orders greater than $100"
- "Which products have low inventory?"
- "Get the top 10 customers by total spend"
Workflow
1. Understand the Schema
Before generating SQL, always check the table structure:
whodb_tables(connection="...") → Get available tables
whodb_columns(table="relevant_table") → Get column names and types
2. Identify Intent
Parse the natural language request:
- Subject: What entity? (users, orders, products)
- Filter: What conditions? (last month, > $100, active)
- Aggregation: Count, sum, average, max, min?
- Grouping: By what dimension?
- Ordering: Sort by what? Ascending/descending?
- Limit: How many results?
3. Map to Schema
- Match entities to table names
- Match attributes to column names
- Identify foreign key joins needed
4. Generate SQL
Build the query following SQL best practices:
SELECT columns FROM table [JOIN other_table ON condition] WHERE filters [GROUP BY columns] [HAVING aggregate_condition] ORDER BY column [ASC|DESC] LIMIT n;
5. Execute and Present
whodb_query(query="generated SQL")
Translation Patterns
| Natural Language | SQL Pattern |
|---|---|
| "last week/month/year" | WHERE date_col >= DATE_SUB(NOW(), INTERVAL 1 WEEK) |
| "more than X" / "greater than X" | WHERE col > X |
| "top N" | ORDER BY col DESC LIMIT N |
| "how many" | SELECT COUNT(*) |
| "total" / "sum of" | SELECT SUM(col) |
| "average" | SELECT AVG(col) |
| "for each" / "by" | GROUP BY col |
| "between X and Y" | WHERE col BETWEEN X AND Y |
| "contains" / "like" | WHERE col LIKE '%term%' |
| "starts with" | WHERE col LIKE 'term%' |
| "is empty" / "is null" | WHERE col IS NULL |
| "is not empty" | WHERE col IS NOT NULL |
Date Handling by Database
PostgreSQL
WHERE created_at >= NOW() - INTERVAL '7 days' WHERE created_at >= DATE_TRUNC('month', CURRENT_DATE)
MySQL
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY) WHERE created_at >= DATE_FORMAT(NOW(), '%Y-%m-01')
SQLite
WHERE created_at >= DATE('now', '-7 days') WHERE created_at >= DATE('now', 'start of month')
Examples
"Show me users who signed up this month"
SELECT * FROM users WHERE created_at >= DATE_TRUNC('month', CURRENT_DATE) ORDER BY created_at DESC;
"Find the top 5 products by sales"
SELECT p.name, SUM(oi.quantity) as total_sold FROM products p JOIN order_items oi ON p.id = oi.product_id GROUP BY p.id, p.name ORDER BY total_sold DESC LIMIT 5;
"How many orders per customer?"
SELECT customer_id, COUNT(*) as order_count FROM orders GROUP BY customer_id ORDER BY order_count DESC;
Safety Rules
- Always use LIMIT for exploratory queries (default: 100)
- Never generate DELETE, UPDATE, or DROP unless explicitly requested
- Warn if query might return large result sets
- Use table aliases for readability in JOINs
Similar Claude Skills & Agent Workflows
google-analytics
Analyze Google Analytics data, review website performance metrics, identify traffic patterns, and suggest data-driven improvements.
docetl
Build and run LLM-powered data processing pipelines with DocETL.
pdf-extractor
Extract text, tables, and form data from PDF documents for analysis and processing.
schema-exploration
For discovering and understanding database structure, tables, columns, and relationships
query-writing
For writing and executing SQL queries - from simple single-table queries to complex multi-table JOINs and aggregations
whodb
Database operations including querying, schema exploration, and data analysis.