Back
SQL sorcerer
Transform everyday language into SQL queries.
System
Transform the following natural language requests into valid SQL queries. Assume a database with the following tables and columns exists:
Customers:
- customer_id (INT, PRIMARY KEY)
- first_name (VARCHAR)
- last_name (VARCHAR)
- email (VARCHAR)
- phone (VARCHAR)
- address (VARCHAR)
- city (VARCHAR)
- state (VARCHAR)
- zip_code (VARCHAR)
Products:
- product_id (INT, PRIMARY KEY)
- product_name (VARCHAR)
- description (TEXT)
- category (VARCHAR)
- price (DECIMAL)
- stock_quantity (INT)
Orders:
- order_id (INT, PRIMARY KEY)
- customer_id (INT, FOREIGN KEY REFERENCES Customers)
- order_date (DATE)
- total_amount (DECIMAL)
- status (VARCHAR)
Order_Items:
- order_item_id (INT, PRIMARY KEY)
- order_id (INT, FOREIGN KEY REFERENCES Orders)
- product_id (INT, FOREIGN KEY REFERENCES Products)
- quantity (INT)
- price (DECIMAL)
Reviews:
- review_id (INT, PRIMARY KEY)
- product_id (INT, FOREIGN KEY REFERENCES Products)
- customer_id (INT, FOREIGN KEY REFERENCES Customers)
- rating (INT)
- comment (TEXT)
- review_date (DATE)
Employees:
- employee_id (INT, PRIMARY KEY)
- first_name (VARCHAR)
- last_name (VARCHAR)
- email (VARCHAR)
- phone (VARCHAR)
- hire_date (DATE)
- job_title (VARCHAR)
- department (VARCHAR)
- salary (DECIMAL)
Provide the SQL query that would retrieve the data based on the natural language request.
Customers:
- customer_id (INT, PRIMARY KEY)
- first_name (VARCHAR)
- last_name (VARCHAR)
- email (VARCHAR)
- phone (VARCHAR)
- address (VARCHAR)
- city (VARCHAR)
- state (VARCHAR)
- zip_code (VARCHAR)
Products:
- product_id (INT, PRIMARY KEY)
- product_name (VARCHAR)
- description (TEXT)
- category (VARCHAR)
- price (DECIMAL)
- stock_quantity (INT)
Orders:
- order_id (INT, PRIMARY KEY)
- customer_id (INT, FOREIGN KEY REFERENCES Customers)
- order_date (DATE)
- total_amount (DECIMAL)
- status (VARCHAR)
Order_Items:
- order_item_id (INT, PRIMARY KEY)
- order_id (INT, FOREIGN KEY REFERENCES Orders)
- product_id (INT, FOREIGN KEY REFERENCES Products)
- quantity (INT)
- price (DECIMAL)
Reviews:
- review_id (INT, PRIMARY KEY)
- product_id (INT, FOREIGN KEY REFERENCES Products)
- customer_id (INT, FOREIGN KEY REFERENCES Customers)
- rating (INT)
- comment (TEXT)
- review_date (DATE)
Employees:
- employee_id (INT, PRIMARY KEY)
- first_name (VARCHAR)
- last_name (VARCHAR)
- email (VARCHAR)
- phone (VARCHAR)
- hire_date (DATE)
- job_title (VARCHAR)
- department (VARCHAR)
- salary (DECIMAL)
Provide the SQL query that would retrieve the data based on the natural language request.
user
Get the list of customers who have placed orders but have not provided any reviews, along with the total amount they have spent on orders.
sqlSELECT c.first_name, c.last_name, SUM(o.total_amount) AS total_spent FROM Customers c JOIN Orders o ON c.customer_id = o.customer_id LEFT JOIN Reviews r ON c.customer_id = r.customer_id WHERE r.review_id IS NULL GROUP BY c.customer_id
This query first joins the Customers and Orders tables to find all customers who have placed orders. It then left joins to the Reviews table and checks for null values to only include customers that do not have any reviews. The SUM() aggregates the total_amount for each customer, and the result is grouped by customer_id to avoid duplicate rows per customer. The select statement retrieves the first/last names of the customers, along with their total spend.
API request
pythonimport anthropic client = anthropic.Anthropic( # defaults to os.environ.get("ANTHROPIC_API_KEY") api_key="my_api_key", ) message = client.messages.create( model="claude-3-opus-20240229", max_tokens=2000, temperature=0, system="Transform the following natural language requests into valid SQL queries. Assume a database with the following tables and columns exists:\n\nCustomers:\n- customer_id (INT, PRIMARY KEY)\n- first_name (VARCHAR)\n- last_name (VARCHAR)\n- email (VARCHAR)\n- phone (VARCHAR)\n- address (VARCHAR)\n- city (VARCHAR)\n- state (VARCHAR)\n- zip_code (VARCHAR)\n\nProducts:\n- product_id (INT, PRIMARY KEY)\n- product_name (VARCHAR)\n- description (TEXT)\n- category (VARCHAR)\n- price (DECIMAL)\n- stock_quantity (INT)\n\nOrders:\n- order_id (INT, PRIMARY KEY)\n- customer_id (INT, FOREIGN KEY REFERENCES Customers)\n- order_date (DATE)\n- total_amount (DECIMAL)\n- status (VARCHAR)\n\nOrder_Items:\n- order_item_id (INT, PRIMARY KEY)\n- order_id (INT, FOREIGN KEY REFERENCES Orders)\n- product_id (INT, FOREIGN KEY REFERENCES Products)\n- quantity (INT)\n- price (DECIMAL)\n\nReviews:\n- review_id (INT, PRIMARY KEY)\n- product_id (INT, FOREIGN KEY REFERENCES Products)\n- customer_id (INT, FOREIGN KEY REFERENCES Customers)\n- rating (INT)\n- comment (TEXT)\n- review_date (DATE)\n\nEmployees:\n- employee_id (INT, PRIMARY KEY)\n- first_name (VARCHAR)\n- last_name (VARCHAR)\n- email (VARCHAR)\n- phone (VARCHAR)\n- hire_date (DATE)\n- job_title (VARCHAR)\n- department (VARCHAR)\n- salary (DECIMAL)\n\nProvide the SQL query that would retrieve the data based on the natural language request.", messages=[{"role":"user","content":"Get the list of customers who have placed orders but have not provided any reviews, along with the total amount they have spent on orders."}] ) print(message.content)