DEV Community

Dev Cookies
Dev Cookies

Posted on

🎯 Crack SDE Interviews with These Must-Know SQL Query Problems

βœ… 1. Find the Second Highest Salary

Table: Employee(id, name, salary)

SELECT MAX(salary) AS SecondHighestSalary
FROM Employee
WHERE salary < (
    SELECT MAX(salary) FROM Employee
);
Enter fullscreen mode Exit fullscreen mode

🧠 Concept: Subqueries, MAX()
🎯 Asked by: Amazon, Google, Meta


βœ… 2. Find Duplicate Records

Table: Users(id, email)

SELECT email, COUNT(*) AS cnt
FROM Users
GROUP BY email
HAVING COUNT(*) > 1;
Enter fullscreen mode Exit fullscreen mode

🧠 Concept: GROUP BY, HAVING
🎯 Asked by: Microsoft, Uber


βœ… 3. Find Employees Who Earn More Than Their Manager

Table: Employee(id, name, salary, manager_id)

SELECT e.name
FROM Employee e
JOIN Employee m ON e.manager_id = m.id
WHERE e.salary > m.salary;
Enter fullscreen mode Exit fullscreen mode

🧠 Concept: Self JOIN
🎯 Asked by: Google, Oracle


βœ… 4. Nth Highest Salary Using DENSE_RANK

Table: Employee(id, name, salary)

SELECT salary
FROM (
    SELECT salary, DENSE_RANK() OVER (ORDER BY salary DESC) AS rnk
    FROM Employee
) AS ranked
WHERE rnk = 3;
Enter fullscreen mode Exit fullscreen mode

🧠 Concept: Window Functions
🎯 Asked by: Flipkart, Salesforce


βœ… 5. Find Customers with No Orders

Tables: Customers(customer_id), Orders(order_id, customer_id)

SELECT c.customer_id
FROM Customers c
LEFT JOIN Orders o ON c.customer_id = o.customer_id
WHERE o.order_id IS NULL;
Enter fullscreen mode Exit fullscreen mode

🧠 Concept: LEFT JOIN, NULL Filtering
🎯 Asked by: Amazon, Adobe


βœ… 6. Get Department with Highest Average Salary

Table: Employee(id, name, salary, department_id)

SELECT department_id
FROM Employee
GROUP BY department_id
ORDER BY AVG(salary) DESC
LIMIT 1;
Enter fullscreen mode Exit fullscreen mode

🧠 Concept: Aggregation, ORDER BY, LIMIT
🎯 Asked by: Google, Paytm


βœ… 7. Find Consecutive Login Days

Table: Login(user_id, login_date)
Find users who logged in 3 consecutive days.

SELECT DISTINCT l1.user_id
FROM Login l1
JOIN Login l2 ON l1.user_id = l2.user_id AND DATEDIFF(l2.login_date, l1.login_date) = 1
JOIN Login l3 ON l1.user_id = l3.user_id AND DATEDIFF(l3.login_date, l1.login_date) = 2;
Enter fullscreen mode Exit fullscreen mode

🧠 Concept: Self JOINs with date difference
🎯 Asked by: Amazon, Microsoft


βœ… 8. Rank Employees within Each Department

Table: Employee(id, name, salary, department_id)

SELECT id, name, salary, department_id,
       RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS dept_rank
FROM Employee;
Enter fullscreen mode Exit fullscreen mode

🧠 Concept: Partitioned Window Functions
🎯 Asked by: Google, Oracle


βœ… 9. Get Cumulative Salary

Table: Employee(id, name, salary)

SELECT name, salary,
       SUM(salary) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_salary
FROM Employee;
Enter fullscreen mode Exit fullscreen mode

🧠 Concept: Window Function with SUM
🎯 Asked by: Goldman Sachs, Morgan Stanley


βœ… 10. Find Customers Who Ordered All Products

Tables: Orders(customer_id, product_id), Products(product_id)

SELECT customer_id
FROM Orders
GROUP BY customer_id
HAVING COUNT(DISTINCT product_id) = (SELECT COUNT(*) FROM Products);
Enter fullscreen mode Exit fullscreen mode

🧠 Concept: COUNT DISTINCT, Subqueries
🎯 Asked by: Amazon, Swiggy


Top comments (0)