Write optimized SQL for your dialect with best practices. Use when translating a natural-language data need into SQL, building a multi-CTE query with joins and aggregations, optimizing a query against a large partitioned table, or getting dialect-specific syntax for Snowflake, BigQuery, Postgres, etc.
1k tokens
context cost
the whole folder, loaded on every use
1
files
instructions only
0
copies elsewhere
how many repositories repackaged it
23273
stars on the repo
on the repository, not the skill itself
Install
one command, takes just this skill from the repository
Remember the dialect for future queries in the same session.
3. Discover Schema (If Warehouse Connected)
If a data warehouse MCP server is connected:
Search for relevant tables based on the user's description
Inspect column names, types, and relationships
Check for partitioning or clustering keys that affect performance
Look for pre-built views or materialized views that might simplify the query
4. Write the Query
Follow these best practices:
Structure:
Use CTEs (WITH clauses) for readability when queries have multiple logical steps
One CTE per logical transformation or data source
Name CTEs descriptively (e.g., daily_signups, active_users, revenue_by_product)
Performance:
Never use SELECT * in production queries -- specify only needed columns
Filter early (push WHERE clauses as close to the base tables as possible)
Use partition filters when available (especially date partitions)
Prefer EXISTS over IN for subqueries with large result sets
Use appropriate JOIN types (don't use LEFT JOIN when INNER JOIN is correct)
Avoid correlated subqueries when a JOIN or window function works
Be mindful of exploding joins (many-to-many)
Readability:
Add comments explaining the "why" for non-obvious logic
Use consistent indentation and formatting
Alias tables with meaningful short names (not just a, b, c)
Put each major clause on its own line
Dialect-specific optimizations:
Apply dialect-specific syntax and functions (see sql-queries skill for details)
Use dialect-appropriate date functions, string functions, and window syntax
Note any dialect-specific performance features (e.g., Snowflake clustering, BigQuery partitioning)
5. Present the Query
Provide:
The complete query in a SQL code block with syntax highlighting
Brief explanation of what each CTE or section does
Performance notes if relevant (expected cost, partition usage, potential bottlenecks)
Modification suggestions -- how to adjust for common variations (different time range, different granularity, additional filters)
6. Offer to Execute
If a data warehouse is connected, offer to run the query and analyze the results. If the user wants to run it themselves, the query is ready to copy-paste.
Examples
Simple aggregation:
/write-query Count of orders by status for the last 30 days
Complex analysis:
/write-query Cohort retention analysis -- group users by their signup month, then show what percentage are still active (had at least one event) at 1, 3, 6, and 12 months after signup
Performance-critical:
/write-query We have a 500M row events table partitioned by date. Find the top 100 users by event count in the last 7 days with their most recent event type.
Tips
Mention your SQL dialect upfront to get the right syntax immediately
If you know the table names, include them -- otherwise Claude will help you find them
Specify if you need the query to be idempotent (safe to re-run) or one-time
For recurring queries, mention if it should be parameterized for date ranges
How to use it
Copy the folder
Take anthropics/write-query from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
Check the name does not clash
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.