SQL Answers
SQL Answers
https://youtube.com/@tarunkhandagare?si=rgzV8rYCcVECppXo
💡 Medium Level
1️⃣ Find the second highest salary in an employee table:
2️⃣ Fetch all employees whose names contain the letter “a” exactly twice:
SELECT *
FROM employees
WHERE name LIKE '%a%a%'
AND name NOT LIKE '%a%a%a%';
SELECT e.*
FROM employees e
JOIN (
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id
) d ON e.department_id = d.department_id
WHERE e.salary > d.avg_salary;
7️⃣ Fetch records where the date is within the last 7 days from today:
SELECT *
FROM table_name
WHERE date_column >= CURDATE() - INTERVAL 7 DAY;
SELECT *
FROM (
SELECT *,
RANK() OVER (PARTITION BY group_column ORDER BY some_column
DESC) AS rank
FROM table_name
) ranked_data
WHERE rank <= 3;
💡 Challenging Level
1️⃣ Retrieve customers who made their first purchase in the last 6 months:
SELECT customer_id
FROM orders
WHERE order_date = (
SELECT MIN(order_date)
FROM orders o
WHERE o.customer_id = orders.customer_id
)
AND order_date >= CURDATE() - INTERVAL 6 MONTH;
2️⃣ Pivot a table to convert rows into columns (Example: Sales by Month):
SELECT *
FROM (
SELECT customer_id, amount, MONTH(order_date) AS month
FROM sales
) s
PIVOT (
SUM(amount) FOR month IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
) p;
SELECT salary
FROM (
SELECT salary,
ROW_NUMBER() OVER (ORDER BY salary) AS row_num,
COUNT(*) OVER () AS total_rows
FROM employees
) ranked
WHERE row_num = total_rows / 2 OR row_num = (total_rows / 2) + 1;
5️⃣ Fetch all users who logged in consecutively for 3 days or more:
SELECT user_id
FROM (
SELECT user_id, login_date,
LEAD(login_date, 1) OVER (PARTITION BY user_id ORDER BY
login_date) AS next_day,
LEAD(login_date, 2) OVER (PARTITION BY user_id ORDER BY
login_date) AS third_day
FROM logins
) consecutive_logins
WHERE next_day = login_date + INTERVAL 1 DAY
AND third_day = login_date + INTERVAL 2 DAY;
6️⃣ Delete duplicate rows while keeping one occurrence:
SELECT
SUM(CASE WHEN category = 'Category_A' THEN sales ELSE 0 END) /
SUM(CASE WHEN category = 'Category_B' THEN sales ELSE 1 END) AS
sales_ratio
FROM sales_table;
💡 Advanced Problem-Solving
1️⃣ Rank products by sales in descending order for each region:
2️⃣ Fetch all employees whose salaries fall within the top 10% of their department:
SELECT *
FROM employees e
WHERE salary >= (
SELECT PERCENTILE_CONT(0.9) WITHIN GROUP (ORDER BY salary)
FROM employees e2
WHERE e.department_id = e2.department_id
);
SELECT *
FROM orders
WHERE HOUR(order_time) BETWEEN 9 AND 18;
SELECT user_id
FROM user_activity
WHERE DAYOFWEEK(activity_date) BETWEEN 2 AND 6
INTERSECT
SELECT user_id
FROM user_activity
WHERE DAYOFWEEK(activity_date) IN (1, 7);
5️⃣ Retrieve customers who made purchases across at least three different categories:
SELECT customer_id
FROM sales
GROUP BY customer_id
HAVING COUNT(DISTINCT category) >= 3;