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.
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 ratings0% 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.
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_learnRANK() 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_learnSELECT 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_learnQ6: 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_learnJOIN 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_learnWHERE 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_learnFROM 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_learnAVG(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_learnCOUNT(*) 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