Spaces:
Running
Running
| """ | |
| TASK 1 — EASY: Syntax Error Fix | |
| Difficulty: Easy | |
| Bug type: Simple syntax errors (typo in keyword, missing alias, wrong column name) | |
| Max steps: 10 | |
| Expected baseline model score: 0.8-1.0 | |
| """ | |
| from typing import List, Dict, Any | |
| from .base import BaseTask | |
| class EasyTask(BaseTask): | |
| """ | |
| Scenario: An e-commerce company wants to find the top 5 customers | |
| by total order value. The query has a syntax error: | |
| uses 'GRUP BY' instead of 'GROUP BY' and references wrong column alias. | |
| Database: customers, orders, order_items | |
| Bug 1: 'GRUP BY' typo | |
| Bug 2: ORDER BY references 'total' but SELECT aliases it as 'total_value' | |
| """ | |
| def task_id(self) -> str: | |
| return "easy_syntax_fix" | |
| def name(self) -> str: | |
| return "Top Customers by Revenue — Syntax Error Fix" | |
| def difficulty(self) -> str: | |
| return "easy" | |
| def description(self) -> str: | |
| return """You are debugging a SQL query for an e-commerce analytics dashboard. | |
| The query is supposed to find the top 5 customers by their total order value | |
| (sum of quantity * unit_price across all their orders). | |
| The query has 2 syntax/reference bugs that prevent it from running: | |
| 1. A typo in a SQL keyword | |
| 2. An ORDER BY clause that references a column alias incorrectly | |
| Fix both bugs so the query runs and returns the correct result. | |
| The result should show: customer_name, total_value (rounded to 2 decimal places), | |
| ordered from highest to lowest, top 5 only.""" | |
| def expected_output_description(self) -> str: | |
| return "5 rows: customer_name, total_value (DESC order). Alice Chen should be first with 1947.50." | |
| def broken_query(self) -> str: | |
| return """SELECT | |
| c.name AS customer_name, | |
| ROUND(SUM(oi.quantity * oi.unit_price), 2) AS total_value | |
| FROM customers c | |
| JOIN orders o ON c.id = o.customer_id | |
| JOIN order_items oi ON o.id = oi.order_id | |
| GRUP BY c.id, c.name | |
| ORDER BY total DESC | |
| LIMIT 5""" | |
| def schema_sql(self) -> str: | |
| return """ | |
| CREATE TABLE customers ( | |
| id INTEGER PRIMARY KEY, | |
| name TEXT NOT NULL, | |
| email TEXT UNIQUE NOT NULL, | |
| created_at TEXT DEFAULT CURRENT_TIMESTAMP | |
| ); | |
| CREATE TABLE orders ( | |
| id INTEGER PRIMARY KEY, | |
| customer_id INTEGER NOT NULL, | |
| order_date TEXT NOT NULL, | |
| status TEXT DEFAULT 'completed', | |
| FOREIGN KEY (customer_id) REFERENCES customers(id) | |
| ); | |
| CREATE TABLE order_items ( | |
| id INTEGER PRIMARY KEY, | |
| order_id INTEGER NOT NULL, | |
| product_name TEXT NOT NULL, | |
| quantity INTEGER NOT NULL, | |
| unit_price REAL NOT NULL, | |
| FOREIGN KEY (order_id) REFERENCES orders(id) | |
| )""" | |
| def seed_data_sql(self) -> str: | |
| return """ | |
| INSERT INTO customers VALUES (1,'Alice Chen','alice@example.com','2023-01-01'); | |
| INSERT INTO customers VALUES (2,'Bob Kumar','bob@example.com','2023-01-05'); | |
| INSERT INTO customers VALUES (3,'Carol White','carol@example.com','2023-01-10'); | |
| INSERT INTO customers VALUES (4,'David Park','david@example.com','2023-02-01'); | |
| INSERT INTO customers VALUES (5,'Eva Rodriguez','eva@example.com','2023-02-15'); | |
| INSERT INTO customers VALUES (6,'Frank Liu','frank@example.com','2023-03-01'); | |
| INSERT INTO orders VALUES (1,1,'2023-06-01','completed'); | |
| INSERT INTO orders VALUES (2,1,'2023-07-15','completed'); | |
| INSERT INTO orders VALUES (3,2,'2023-06-10','completed'); | |
| INSERT INTO orders VALUES (4,3,'2023-06-20','completed'); | |
| INSERT INTO orders VALUES (5,3,'2023-08-01','completed'); | |
| INSERT INTO orders VALUES (6,4,'2023-07-01','completed'); | |
| INSERT INTO orders VALUES (7,5,'2023-07-20','completed'); | |
| INSERT INTO orders VALUES (8,5,'2023-08-10','completed'); | |
| INSERT INTO orders VALUES (9,6,'2023-09-01','completed'); | |
| INSERT INTO order_items VALUES (1,1,'Laptop',1,1200.00); | |
| INSERT INTO order_items VALUES (2,1,'Mouse',2,25.00); | |
| INSERT INTO order_items VALUES (3,2,'Keyboard',1,150.00); | |
| INSERT INTO order_items VALUES (4,2,'Monitor',1,450.00); | |
| INSERT INTO order_items VALUES (5,2,'Webcam',1,97.50); | |
| INSERT INTO order_items VALUES (6,3,'Headphones',1,350.00); | |
| INSERT INTO order_items VALUES (7,3,'USB Hub',2,45.00); | |
| INSERT INTO order_items VALUES (8,4,'Tablet',1,600.00); | |
| INSERT INTO order_items VALUES (9,4,'Case',1,35.00); | |
| INSERT INTO order_items VALUES (10,5,'Charger',2,30.00); | |
| INSERT INTO order_items VALUES (11,5,'Cable',3,15.00); | |
| INSERT INTO order_items VALUES (12,6,'Desk Lamp',1,85.00); | |
| INSERT INTO order_items VALUES (13,6,'Chair Mat',1,60.00); | |
| INSERT INTO order_items VALUES (14,7,'Speakers',1,220.00); | |
| INSERT INTO order_items VALUES (15,7,'Microphone',1,180.00); | |
| INSERT INTO order_items VALUES (16,8,'Webcam',1,97.50); | |
| INSERT INTO order_items VALUES (17,9,'Monitor',1,450.00)""" | |
| def expected_output(self) -> List[Dict[str, Any]]: | |
| # Alice: 1200+50+150+450+97.50 = 1947.50 (orders 1,2) | |
| # Wait: recalculate | |
| # Alice order 1: laptop 1200 + mouse 2*25=50 = 1250 | |
| # Alice order 2: keyboard 150 + monitor 450 + webcam 97.50 = 697.50 | |
| # Alice total: 1947.50 — but let me recalculate with all items | |
| # Actually: 1200+50+150+450+97.50 = 1947.50 | |
| # Carol: tablet 600 + case 35 + charger 60 + cable 45 = 740 | |
| # Eva: speakers 220 + micro 180 + webcam 97.50 = 497.50 | |
| # Bob: headphones 350 + hub 90 = 440 | |
| # Frank: lamp 85 + mat 60 + monitor 450 = 595 | |
| # David: lamp 85 + mat 60 = 145 — wait David is order 6 | |
| # Order 6 items 12,13: lamp 85 + mat 60 = 145 | |
| return [ | |
| {"customer_name": "Alice Chen", "total_value": 1947.50}, | |
| {"customer_name": "Carol White", "total_value": 740.00}, | |
| {"customer_name": "Frank Liu", "total_value": 595.00}, | |
| {"customer_name": "Eva Rodriguez", "total_value": 497.50}, | |
| {"customer_name": "Bob Kumar", "total_value": 440.00}, | |
| ] | |
| def hint(self) -> str: | |
| return "Hint: Check every SQL keyword spelling carefully. Also check that your ORDER BY column name exactly matches the alias in your SELECT clause." | |