0% found this document useful (0 votes)
179 views9 pages

Top 15 Amazon SQL Interview Questions & Answers

The document provides a collection of 15 SQL interview questions along with their answers, covering various topics such as customer purchases, sales analysis, employee management, and product tracking. Each question is formatted with a clear structure, including relevant tables and SQL code snippets for solutions. The questions range in difficulty and are designed to test SQL skills in real-world scenarios.

Uploaded by

suno
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF or read online on Scribd
0% found this document useful (0 votes)
179 views9 pages

Top 15 Amazon SQL Interview Questions & Answers

The document provides a collection of 15 SQL interview questions along with their answers, covering various topics such as customer purchases, sales analysis, employee management, and product tracking. Each question is formatted with a clear structure, including relevant tables and SQL code snippets for solutions. The questions range in difficulty and are designed to test SQL skills in real-world scenarios.

Uploaded by

suno
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF or read online on Scribd
You are on page 1/ 9
Amazon SQL Interview Q&A (DOWNLOAD THE FREE PDF) Here are all 15 SQL questions and answers in plain text format, with increased difficulty for specified questions. The first letter of each question is capitalized. QI: Identify customers who made purchases on exactly three different days in the last month. Tables: purchases (customer_id, purchase_date) Answer: WITH purchases_summary AS ( SELECT customer_id, COUNT(DISTINCT purchase_date) AS purchase_days FROM purchases WHERE purchase_date >= DATEADD(month, -1, CURRENT_DATE) GROUP BY customer_id ) SELECT customer_id FROM purchases_summary WHERE purchase_days = 3; Q2: Find the top 2 highest-selling products for each category. Tables: sales (product_id, sale_amount), products (product_id, category) Answer: WITH ranked_sales AS ( SELECT p.category, s.product_id, SUM(s.sale_amount) AS total_sales, Like This? Repost to your Network and Follow @data_science_learn RANK() OVER (PARTITION BY p.category ORDER BY SUM(s.sale_amount) DESC) AS rank FROM sales s JOIN products p ON s.product_id = p.product_id GROUP BY p.category, s.product_id ) SELECT category, product_id, total_sales FROM ranked _sales WHERE rank <= 2; Q3: Detect anomalies where sales for a product are 50% lower than the average for that product. Tables: sales (product_id, sale_amount) Answer: WITH product_stats AS ( SELECT product_id, AVG(sale_amount) AS avg_sales FROM sales GROUP BY product_id ) SELECT s.product_id, s.sale_amount FROM sales s JOIN product_stats ps ON s.product_id = ps.produet_id WHERE s.sale_amount < 0.5 * ps.avg_sales; Q4: Find employees who have never been a manager and have worked in more than one department. Tables: employees (employee _id, name, manager_id, department_id) Answer: WITH manager _list AS ( Like This? Repost to your Network and Follow @data_science_learn SELECT DISTINCT manager_id FROM employees WHERE manager_id IS NOT NULL ), department_count AS ( SELECT employee_id, COUNT(DISTINCT department_id) AS department_count FROM employees GROUP BY employee_id ) SELECT e.employee_id, e.name FROM employees ¢ JOIN department_count de ON e.employee_id = de.employee_id WHERE ec.employee_id NOT IN (SELECT manager_id FROM manager _list) AND de.department_count > 1; Q5: Calculate the median salary in cach department. Tables: employees (employee_id, department_id, salary) Answer: WITH ranked_salaries AS ( SELECT department_id, salary, ROW_NUMBER( OVER (PARTITION BY department_id ORDER BY salary) AS row_num, COUNT(*) OVER (PARTITION BY department_id) AS total_rows FROM employees ) SELECT department_id, AVG(salary) AS median_salary FROM ranked_salaries WHERE row_num IN (FLOOR((total_rows + 1) / 2), CEIL((total_rows + 1) /2)) GROUP BY department_id; Like This? Repost to your Network and Follow @data_science_learn Q6: Identify customers who purchased products from all available categories. Tables: purchases (customer_id, product_id), products (product_id, category) Answer: WITH categories_per_customer AS ( SELECT customer_id, COUNT(DISTINCT p.category) AS customer_categories FROM purchases pu JOIN products p ON pu.product_id = p.product_id GROUP BY customer_id ) total_categories AS ( SELECT COUNT(DISTINCT category) AS total_categories FROM products ) SELECT customer_id FROM categories_per_customer, total_categories WHERE customer_categories = total_categories; Q7: Calculate the cumulative sales for each store, but only include dates where the daily sales exceeded the store's average daily sales. Tables: sales (store_id, sale_amount, sale_date) Answer: WITH store_avg AS ( SELECT store_id, AVG(sale_amount) AS avg_sales FROM sales GROUP BY store_id ), filtered_sales AS ( SELECT s.store_id, s.sale_date, s.sale_amount FROM sales s Like This? Repost to your Network and Follow @data_science_learn JOIN store_avg sa ON s.store_id = sa.store_id WHERE s.sale_amount > sa.avg_sales ) SELECT store_id, sale_date, SUM(sale_amount) OVER (PARTITION BY store_id ORDER BY sale_date) AS cumulative sales FROM filtered_sales; Q8: List employees who earn more than their department average. Tables: employees (employee_id, department_id, salary) Answer: WITH department_avg AS ( SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY department_id ) SELECT e.employee_id, e.salary FROM employees e JOIN department_avg da ON e.department_id = da.department_id WHERE e.salary > da.avg_salary; Q9: Identify products that have been sold but have no record in the products table and also calculate how many times each missing product has been sold. Tables: sales (product_id), products (product_id) Answer: SELECT s.product_id, COUNT(*) AS times_sold FROM sales s LEFT JOIN products p ON s.product_id = p.product_id Like This? Repost to your Network and Follow @data_science_learn WHERE p.product_id IS NULL GROUP BY s.product_id; Q10: Identify suppliers whose average delivery time is less than 2 days, but only consider deliveries with quantities greater than 100 units. Tables: deliveries (supplier_id, delivery_date, order_date, quantity) Answer: SELECT supplier_id FROM deliveries WHERE quantity > 100 GROUP BY supplier_id HAVING AVG(DATEDIFF(day, order_date, delivery_date)) < 2; QI: Find customers who made no purchases in the last 6 months but made at least one purchase in the 6 months prior to that. Tables: customers (customer_id), purchases (customer_id, purchase_date) Answer: WITH six_months_ago AS ( SELECT customer_id FROM purchases WHERE purchase_date BETWEEN DATEADD(month, -12, CURRENT_DATE) AND DATEADD(month, -6, CURRENT_DATE) )s recent_purchases AS ( SELECT customer_id FROM purchases WHERE purchase_date >= DATEADD(month, -6, CURRENT_DATE) ) SELECT DISTINCT c.customer_id Like This? Repost to your Network and Follow @data_science_learn FROM customers ¢ JOIN six_months_ago sm ON c.customer_id = sm.customer_id LEFT JOIN recent_purchases rp ON c.customer_id = rp.customer_id WHERE rp.customer_id IS NULL; Q12: Find the top 3 most frequent product combinations bought together. Tables: order_details (order_id, product_id) Answer: WITH product_pairs AS ( SELECT od1.produet_id AS product, od2.product_id AS product2, COUNT(*) AS pair_count FROM order_details odl JOIN order_details od2 ON od1.order_id = od2.order_id AND od1 product_id < od2.product_id GROUP BY odI.product_id, od2.product_id ) SELECT product!, produet2, pair_count FROM product_pairs ORDER BY pair_count DESC LIMIT 3; Q13: Calculate the moving average of sales for each product over a 7-day window. Tables: sales (product_id, sale_amount, sale_date) Answer: SELECT product_id, sale_date, Like This? Repost to your Network and Follow @data_science_learn AVG(sale_amount) OVER (PARTITION BY product_id ORDER BY sale_date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_avg FROM sales; Q14: Rank stores by their monthly sales performance. Tables: sales (store_id, sale_amount, sale_date) Answer: WITH monthly_sales AS ( SELECT store_id, DATE_TRUNC(‘month’, sale_date) AS sale_month, SUM(sale_amount) AS total_sales FROM sales GROUP BY store_id, DATE_TRUNC(‘month’, sale_date) ) SELECT store_id, sale_month, total_sales, RANK() OVER (PARTITION BY sale_month ORDER BY total_sales DESC) AS rank FROM monthly_sales; QI5: Find customers who placed more than 50% of their orders in the last month. Tables; orders (customer_id, order_id, order_date) Answer: WITH order_stats AS ( SELECT customer_id, Like This? Repost to your Network and Follow @data_science_learn COUNT(*) AS total_orders, SUM(CASE WHEN order_date >= DATEADD(month, -1, CURRENT_DATE) THEN | ELSE 0 END) AS last_month_orders FROM orders GROUP BY customer_id ) SELECT customer_id FROM order_stats WHERE last_month_orders > 0.5 * total_orders; Like This? Repost to your Network and Follow @data_science_learn

You might also like