File size: 12,439 Bytes
e7cf806
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
[
  {
    "id": "q1",
    "title": "List all main course items",
    "difficulty": "Beginner",
    "description": "Retrieve the names and prices of all menu items in the Main Course category.",
    "hint": "Use a WHERE clause to filter by category.",
    "expected_sql": "SELECT name, price FROM menu_items WHERE category = 'Main Course';"
  },
  {
    "id": "q2",
    "title": "Find orders by customer ID 1",
    "difficulty": "Beginner",
    "description": "Show all orders placed by the customer with ID 1.",
    "hint": "Use a WHERE clause to filter by customer_id.",
    "expected_sql": "SELECT order_id, order_date, total_amount FROM orders WHERE customer_id = 1;"
  },
  {
    "id": "q3",
    "title": "List all beverages",
    "difficulty": "Beginner",
    "description": "Retrieve the names and prices of all items in the Beverage category.",
    "hint": "Use a WHERE clause to filter by category.",
    "expected_sql": "SELECT name, price FROM menu_items WHERE category = 'Beverage';"
  },
  {
    "id": "q4",
    "title": "Find orders on June 11, 2023",
    "difficulty": "Beginner",
    "description": "Show all orders placed on June 11, 2023.",
    "hint": "Use a WHERE clause with date comparison.",
    "expected_sql": "SELECT order_id, customer_id, total_amount FROM orders WHERE order_date = '2023-06-11';"
  },
  {
    "id": "q5",
    "title": "List unique customer emails",
    "difficulty": "Beginner",
    "description": "Retrieve all unique customer email addresses.",
    "hint": "Use DISTINCT to avoid duplicate emails.",
    "expected_sql": "SELECT DISTINCT email FROM customers;"
  },
  {
    "id": "q6",
    "title": "Items in order ID 3",
    "difficulty": "Beginner",
    "description": "Show the menu items and quantities for order ID 3.",
    "hint": "Join order_items with menu_items and filter by order_id.",
    "expected_sql": "SELECT m.name, oi.quantity FROM order_items oi JOIN menu_items m ON oi.item_id = m.item_id WHERE oi.order_id = 3;"
  },
  {
    "id": "q7",
    "title": "List customer contact details",
    "difficulty": "Beginner",
    "description": "Show names and contact numbers of all customers.",
    "hint": "Select name and contact from the customers table.",
    "expected_sql": "SELECT name, contact FROM customers;"
  },
  {
    "id": "q8",
    "title": "Find high-priced items",
    "difficulty": "Beginner",
    "description": "Retrieve menu items with a price greater than 150.",
    "hint": "Use a WHERE clause to filter by price.",
    "expected_sql": "SELECT name, price FROM menu_items WHERE price > 150;"
  },
  {
    "id": "q9",
    "title": "List all order items",
    "difficulty": "Beginner",
    "description": "Show all order items with their quantities.",
    "hint": "Select from the order_items table.",
    "expected_sql": "SELECT order_item_id, order_id, item_id, quantity FROM order_items;"
  },
  {
    "id": "q10",
    "title": "Find orders above 300",
    "difficulty": "Beginner",
    "description": "Show orders with a total amount greater than 300.",
    "hint": "Use a WHERE clause to filter by total_amount.",
    "expected_sql": "SELECT order_id, customer_id, total_amount FROM orders WHERE total_amount > 300;"
  },
  {
    "id": "q11",
    "title": "Count orders per customer",
    "difficulty": "Intermediate",
    "description": "Show the number of orders placed by each customer, including those with zero orders.",
    "hint": "Use a LEFT JOIN and GROUP BY customer name.",
    "expected_sql": "SELECT c.name, COUNT(o.order_id) AS order_count FROM customers c LEFT JOIN orders o ON c.customer_id = o.customer_id GROUP BY c.name;"
  },
  {
    "id": "q12",
    "title": "Total items ordered per category",
    "difficulty": "Intermediate",
    "description": "Calculate the total quantity of items ordered for each menu item category.",
    "hint": "Join menu_items and order_items, then GROUP BY category.",
    "expected_sql": "SELECT m.category, SUM(oi.quantity) AS total_quantity FROM menu_items m JOIN order_items oi ON m.item_id = oi.item_id GROUP BY m.category;"
  },
  {
    "id": "q13",
    "title": "Average order amount",
    "difficulty": "Intermediate",
    "description": "Calculate the average total amount of all orders.",
    "hint": "Use AVG on total_amount in the orders table.",
    "expected_sql": "SELECT AVG(total_amount) AS avg_order_amount FROM orders;"
  },
  {
    "id": "q14",
    "title": "Most ordered menu item",
    "difficulty": "Intermediate",
    "description": "Identify the menu item with the highest total quantity ordered.",
    "hint": "Join order_items and menu_items, GROUP BY item name, and use LIMIT.",
    "expected_sql": "SELECT m.name, SUM(oi.quantity) AS total_quantity FROM menu_items m JOIN order_items oi ON m.item_id = oi.item_id GROUP BY m.name ORDER BY total_quantity DESC LIMIT 1;"
  },
  {
    "id": "q15",
    "title": "Customers with multiple orders",
    "difficulty": "Intermediate",
    "description": "Find customers who have placed more than one order.",
    "hint": "Use GROUP BY on customer name and HAVING clause.",
    "expected_sql": "SELECT c.name, COUNT(o.order_id) AS order_count FROM customers c JOIN orders o ON c.customer_id = o.customer_id GROUP BY c.name HAVING COUNT(o.order_id) > 1;"
  },
  {
    "id": "q16",
    "title": "Menu items never ordered",
    "difficulty": "Intermediate",
    "description": "List menu items that have never been ordered.",
    "hint": "Use a LEFT JOIN and check for NULL in the order_items table.",
    "expected_sql": "SELECT m.name FROM menu_items m LEFT JOIN order_items oi ON m.item_id = oi.item_id WHERE oi.order_item_id IS NULL;"
  },
  {
    "id": "q17",
    "title": "Order details with items",
    "difficulty": "Intermediate",
    "description": "Show order details including customer name and menu items for each order.",
    "hint": "Join orders, customers, order_items, and menu_items tables.",
    "expected_sql": "SELECT o.order_id, c.name AS customer_name, m.name AS item_name, oi.quantity FROM orders o JOIN customers c ON o.customer_id = c.customer_id JOIN order_items oi ON o.order_id = oi.order_id JOIN menu_items m ON oi.item_id = m.item_id;"
  },
  {
    "id": "q18",
    "title": "Total revenue per customer",
    "difficulty": "Intermediate",
    "description": "Calculate the total amount spent by each customer based on order totals.",
    "hint": "Use GROUP BY on customer name and SUM on total_amount.",
    "expected_sql": "SELECT c.name, SUM(o.total_amount) AS total_spent FROM customers c JOIN orders o ON c.customer_id = o.customer_id GROUP BY c.name;"
  },
  {
    "id": "q19",
    "title": "Orders with multiple items",
    "difficulty": "Intermediate",
    "description": "List orders that include more than one type of menu item.",
    "hint": "Use GROUP BY on order_id and HAVING clause on COUNT of item_id.",
    "expected_sql": "SELECT o.order_id, COUNT(oi.item_id) AS item_count FROM orders o JOIN order_items oi ON o.order_id = oi.order_id GROUP BY o.order_id HAVING COUNT(oi.item_id) > 1;"
  },
  {
    "id": "q20",
    "title": "Items ordered with high quantity",
    "difficulty": "Intermediate",
    "description": "Show menu items with a total ordered quantity greater than 2.",
    "hint": "Join order_items and menu_items, GROUP BY item name, and use HAVING.",
    "expected_sql": "SELECT m.name, SUM(oi.quantity) AS total_quantity FROM menu_items m JOIN order_items oi ON m.item_id = oi.item_id GROUP BY m.name HAVING SUM(oi.quantity) > 2;"
  },
  {
    "id": "q21",
    "title": "Customer order value analysis",
    "difficulty": "Advanced",
    "description": "Calculate the total value of orders (sum of price * quantity) for each customer.",
    "hint": "Join all tables, multiply price by quantity, and GROUP BY customer name.",
    "expected_sql": "SELECT c.name, SUM(m.price * oi.quantity) AS total_order_value FROM customers c JOIN orders o ON c.customer_id = o.customer_id JOIN order_items oi ON o.order_id = oi.order_id JOIN menu_items m ON oi.item_id = m.item_id GROUP BY c.name;"
  },
  {
    "id": "q22",
    "title": "Most expensive order",
    "difficulty": "Advanced",
    "description": "Identify the order with the highest calculated total based on item prices and quantities.",
    "hint": "Join orders, order_items, and menu_items, calculate total, and use LIMIT.",
    "expected_sql": "SELECT o.order_id, SUM(m.price * oi.quantity) AS calculated_total FROM orders o JOIN order_items oi ON o.order_id = oi.order_id JOIN menu_items m ON oi.item_id = m.item_id GROUP BY o.order_id ORDER BY calculated_total DESC LIMIT 1;"
  },
  {
    "id": "q23",
    "title": "Customers ordering all main courses",
    "difficulty": "Advanced",
    "description": "Find customers who have ordered every item in the Main Course category.",
    "hint": "Count distinct Main Course items per customer and compare with total Main Course items.",
    "expected_sql": "SELECT c.name FROM customers c JOIN orders o ON c.customer_id = o.customer_id JOIN order_items oi ON o.order_id = oi.order_id JOIN menu_items m ON oi.item_id = m.item_id WHERE m.category = 'Main Course' GROUP BY c.name HAVING COUNT(DISTINCT m.item_id) = (SELECT COUNT(*) FROM menu_items WHERE category = 'Main Course');"
  },
  {
    "id": "q24",
    "title": "Average item price per order",
    "difficulty": "Advanced",
    "description": "Calculate the average price of items in each order.",
    "hint": "Join order_items and menu_items, GROUP BY order_id, and use AVG.",
    "expected_sql": "SELECT o.order_id, AVG(m.price) AS avg_item_price FROM orders o JOIN order_items oi ON o.order_id = oi.order_id JOIN menu_items m ON oi.item_id = m.item_id GROUP BY o.order_id;"
  },
  {
    "id": "q25",
    "title": "Order frequency by date",
    "difficulty": "Advanced",
    "description": "Show the number of orders placed on each date in June 2023.",
    "hint": "Use GROUP BY on order_date and COUNT.",
    "expected_sql": "SELECT order_date, COUNT(order_id) AS order_count FROM orders WHERE order_date LIKE '2023-06%' GROUP BY order_date;"
  },
  {
    "id": "q26",
    "title": "Customers who ordered Margherita Pizza",
    "difficulty": "Advanced",
    "description": "List customers who have ordered a Margherita Pizza.",
    "hint": "Join all tables and filter by item name.",
    "expected_sql": "SELECT DISTINCT c.name FROM customers c JOIN orders o ON c.customer_id = o.customer_id JOIN order_items oi ON o.order_id = oi.order_id JOIN menu_items m ON oi.item_id = m.item_id WHERE m.name = 'Margherita Pizza';"
  },
  {
    "id": "q27",
    "title": "Category revenue contribution",
    "difficulty": "Advanced",
    "description": "Calculate the total revenue generated by each menu item category.",
    "hint": "Join menu_items and order_items, multiply price by quantity, and GROUP BY category.",
    "expected_sql": "SELECT m.category, SUM(m.price * oi.quantity) AS total_revenue FROM menu_items m JOIN order_items oi ON m.item_id = oi.item_id GROUP BY m.category;"
  },
  {
    "id": "q28",
    "title": "Orders with high item diversity",
    "difficulty": "Advanced",
    "description": "Find orders that include items from more than one category.",
    "hint": "Join tables, GROUP BY order_id, and COUNT distinct categories.",
    "expected_sql": "SELECT o.order_id, COUNT(DISTINCT m.category) AS category_count FROM orders o JOIN order_items oi ON o.order_id = oi.order_id JOIN menu_items m ON oi.item_id = m.item_id GROUP BY o.order_id HAVING COUNT(DISTINCT m.category) > 1;"
  },
  {
    "id": "q29",
    "title": "Customer spending rank",
    "difficulty": "Advanced",
    "description": "Rank customers by their total spending (sum of order totals).",
    "hint": "Use GROUP BY on customer name, SUM, and ORDER BY.",
    "expected_sql": "SELECT c.name, SUM(o.total_amount) AS total_spent FROM customers c JOIN orders o ON c.customer_id = o.customer_id GROUP BY c.name ORDER BY total_spent DESC;"
  },
  {
    "id": "q30",
    "title": "Items with high revenue contribution",
    "difficulty": "Advanced",
    "description": "Identify menu items contributing more than 200 in total revenue (price * quantity).",
    "hint": "Join menu_items and order_items, calculate revenue, and use HAVING.",
    "expected_sql": "SELECT m.name, SUM(m.price * oi.quantity) AS total_revenue FROM menu_items m JOIN order_items oi ON m.item_id = oi.item_id GROUP BY m.name HAVING SUM(m.price * oi.quantity) > 200;"
  }
]