Top 24 SQL Queries Interview Questions for 2025: How to Solve Common Query Challenges

SQL Queries Interview Questions

SQL interviews aren’t just about writing queries — they’re about solving real business problems using smart, logical thinking. Whether it’s selecting data, combining tables or computing values, interviewers want to see how well you understand the tools. In this guide, we’ll walk through some of the most common SQL query challenges questions and how to approach them like a pro. From basic SELECTs to fine tuned optimization, this blog covers everything you need to shine in your next interview.

Top 24 SQL Queries Interview Questions and Answers 2025

Top 24 SQL Queries Interview Questions and Answers for 2025

SQL interview questions often test your ability to retrieve, manipulate, and summarize data efficiently. You’ll be asked to write queries for business scenarios like finding top selling products, calculating averages or filtering out duplicates. These questions evaluate not just your syntax but your understanding of how databases work. Practice is key here: the more problems you solve, the sharper your logic becomes.

Q1. How do you fetch the top 3 highest salaried employees from a table?

SELECT name, salary

FROM employees

ORDER BY salary DESC

LIMIT 3

Explanation: This query sorts the employees by salary in descending order and limits the result to the top 3, giving the highest paid employees.

Table:

id name salary
1 Amar 70000
2 Ayush 95000
3 Abhi 85000
4 Sneha 90000

Output:

name salary
Ayush 95000
Sneha 90000
Abhi 85000

Q2. How to count total employees in each department?

SELECT department_id, COUNT(*) AS total_employees

FROM employees

GROUP BY department_id

Explanation: This query groups employees by department and uses COUNT to find the number of employees in each.

Table:

id name deparment_id
1 Amar 101
2 Ayush 102
3 Abhi 101

Output:

department_id total_employees
101 2
102 1

Q3. How do you retrieve employee details whose name starts with ‘A’?

SELECT *

FROM employees

WHERE name LIKE ‘A%’

Explanation: This query uses the LIKE operator to filter employees whose name starts with ‘A’.

Table:

id name salary
1 Ayush 75000
2 Abhi 85000

Output:

id name salary
1 Ayush 75000

Q4. How do you find the employee with the minimum salary?

SELECT *

FROM employees

WHERE salary = (SELECT MIN(salary) FROM employees)

Explanation: Subquery fetches the minimum salary and the main query retrieves the employee(s) with that salary.

Table:

id name salary
1 Amar 60000
2 Ayush 75000
3 Abhi 85000

Output:

id name salary
1 Amar 60000

SQL JOIN Interview Questions

Joins are a staple in almost every SQL interview and for good reason. In real world scenarios, data is spread across multiple tables. You’ll often need to perform INNER JOINs, LEFT JOINs or even FULL OUTER JOINs to merge tables like employee records with departments or customers with transactions. But it’s not just about writing the JOIN. It’s knowing which one fits the use case and why it works.

Q1. How can you list employees with their department names?

SELECT e.name, d.department_name

FROM employees e

JOIN departments d ON e.department_id = d.id

Explanation: This query performs an INNER JOIN to combine employee names with their department names based on department ID.

Tables: employees

id name department_id
1 Amar 101
2 Ayush 102

Departments

id department_name
101 HR
102 IT

Output:

name  department_name
Amar HR 
Ayush IT

Q2. How to find employees who don’t belong to any department?

SELECT name

FROM employees e

LEFT JOIN departments d ON e.department_id = d.id

WHERE d.id IS NULL

Explanation: LEFT JOIN keeps all employees and adds department info. If department ID is NULL, the employee isn’t assigned to any department.

Table:

id name deparment_id
1 Amar NULL
2 Ayush 102

Output:

name
Amar

Q3. How to list departments with no employees?

SELECT department_name

FROM departments d

LEFT JOIN employees e ON d.id = e.department_id

WHERE e.id IS NULL

Explanation: LEFT JOIN finds departments with no matching employee entries (i.e, empty departments).

Tables: departments

id department_name
101 HR
102 IT
103 Finance

Employees

id Name department_id
1 Ayush 102

Output:

department_name
HR
Finance

Q4. How to get count of employees in each department with department name?

SELECT d.department_name, COUNT(e.id) AS total_employees

FROM departments d

LEFT JOIN employees e ON d.id = e.department_id

GROUP BY d.department_name

Explanation: Combines LEFT JOIN with GROUP BY to get department names and their corresponding employee counts.

Tables: departments

id department_name
101 HR
102 IT
103 Finance

employees

id name department_id
1 Amar 102

Output:

department_name total_employees
HR 0
IT 1
Finance 0

SQL Aggregate Function Interview Questions

Aggregate functions like SUM(), COUNT(), AVG(), MIN(), and MAX() are essential tools for summarizing data. Interviewers often combine these with GROUP BY to test your ability to analyze datasets for instance, calculating monthly sales per region or counting users per plan type. These questions check your analytical thinking and command over data grouping.

Q1. How do you calculate the total salary of employees?

SELECT SUM(salary) AS total_salary

FROM employees

Explanation: The SUM function is used to calculate the total salary of all employees in the table.

Table:

id name salary
1 Amar 70000
2 Ayush 95000
3 Abhi 85000

Output:

total_salary
250000

Q2. How do you find the average salary of employees?

SELECT AVG(salary) AS average_salary

FROM employees

Explanation: The AVG function computes the average salary across all employees.

Table:

id name salary
1 Amar 70000
2 Ayush 95000
3 Abhi 85000

Output:

average_salary
80000

Q3. How do you find the maximum salary of employees?

SELECT MAX(salary) AS max_salary

FROM employees

Explanation: The MAX function retrieves the highest salary in the table.

Table:

id name salary
1 Amar 70000
2 Ayush 95000
3 Abhi 85000

Output:

max_salary
95000

Q4. How do you find the number of distinct salary values?

SELECT COUNT(DISTINCT salary) AS distinct_salaries

FROM employees

Explanation: The COUNT(DISTINCT) function counts unique salary values, ignoring duplicates.

Table:

id name salary
1 Amar 70000
2 Ayush 95000
3 abhi 95000

Output:

distinct_salaries
2

SQL Subqueries and Nested Queries

Subqueries are used when one query depends on the result of another like finding employees earning more than the average salary. Nested queries can be part of the SELECT, WHERE or FROM clause. They’re frequently used in filtering, comparison, and conditional logic. Interviewers love these because they test your ability to break down complex problems into smaller steps.

Q1. How do you retrieve employees with a salary greater than the average salary?

SELECT name, salary

FROM employees

WHERE salary > (SELECT AVG(salary) FROM employees)

Explanation: The subquery calculates the average salary, and the outer query fetches employees with salaries greater than that average.

Table:

id name salary
1 Amar 60000
2 Ayush 75000
3 Abhi 90000

Output:

name salary
Ayush 75000
Abhi 90000

Q2. How do you find employees working in the same department as ‘Ayush’?

SELECT name

FROM employees

WHERE department_id = (SELECT department_id FROM employees WHERE name = ‘Ayush’)

Explanation: The subquery fetches Ayush’s department ID and the outer query lists employees in that same department.

Table:

id name department_id
1 Amar 101
2 Ayush 101
3 Abhi 102

Output:

name
Amar

Q3. How do you find employees who earn more than the lowest salary in the company?

SELECT name, salary

FROM employees

WHERE salary > (SELECT MIN(salary) FROM employees)

Explanation: The subquery retrieves the lowest salary and the outer query filters employees earning more than that salary.

Table:

id name salary
1 Amar 60000
2 Ayush 75000
3 Abhi 85000

Output:

name salary
Ayush 75000
Abhi 85000

Q4. How do you find employees with a salary greater than the average of their department?

SELECT name, salary, department_id

FROM employees e

WHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = e.department_id)

Explanation: The subquery calculates the department wise average salary and the outer query returns employees with salaries above the department’s average.

Table:

id name salary department_id
1 Amar 60000 101
2 Ayush 75000 101
3 Abhi 85000 102

Output:

name salary department_id
Ayush 75000 101
Abhi 85000 102

SQL Query Optimization Tips

Knowing how to write a query is good. Knowing how to make it fast is even better. SQL query optimization questions assess your understanding of performance indexing, avoiding unnecessary columns in SELECT, using WHERE over HAVING, limiting the use of wildcards and leveraging joins correctly. A well-optimized query is like clean code efficient, readable and scalable.

Q1. How to optimize a query that fetches all employees’ details?

SELECT *

FROM employees

WHERE department_id IS NOT NULL

Explanation: Use specific columns instead of SELECT * to improve performance and avoid retrieving unnecessary data.

Table:

id  name department_id
1 Amar 101
2 Ayush 102
3 Abhi NULL

Output:

id name department_id
1 Amar 101
2 Ayush 102

Q2. How do you optimize a query with a complex JOIN?

SELECT e.name, d.department_name

FROM employees e

JOIN departments d ON e.department_id = d.id

WHERE e.salary > 70000

Explanation: Ensure that the JOIN condition uses indexed columns (such as department_id and id) to speed up the query.

Table:

id name salary department_id
1 Amar 80000 101
2 Ayush 90000 102

Output:

name department_name
Amar HR
Ayush IT

Q3. How do you optimize a query with GROUP BY?

SELECT department_id, COUNT(*)

FROM employees

GROUP BY department_id

Explanation: Indexing department_id helps optimize the grouping process for faster results.

Table:

id name department_id
1 Amar 101
2 Ayush 102
3 Abhi 101

Output:

department_id COUNT(*)
101 2
102 1

Q4. How to avoid using DISTINCT in a query for optimization?

SELECT name, salary

FROM employees

WHERE salary > 50000

Explanation: Instead of using DISTINCT, focus on proper filtering conditions to avoid unnecessary operations.

Table:

id name salary
1 Amar 60000
2 Ayush 70000
3 Abhi 80000

Output:

name salary
Amar 60000
Ayush 70000
Abhi 80000

SQL Window Functions Interview Questions

Functions like ROW_NUMBER(), RANK(), DENSE_RANK(), LEAD() and LAG() give you analytical power without losing the detail of individual rows. These are used in scenarios like ranking employees, finding running totals or identifying changes between periods. Window functions often appear in advanced interviews and mastering them can really set you apart.

Q1. How do you calculate the running total of salaries?

SELECT name, salary,

    SUM(salary) OVER (ORDER BY id) AS running_total

FROM employees

Explanation: The SUM window function calculates a running total, ordered by id.

Table:

id name salary
1 Amar 60000
2 Ayush 70000
3 Abhi 80000

Output:

name salary running_total
Amar 60000 60000
Ayush 70000 130000
Abhi 80000 210000

Q2. How do you calculate the rank of employees based on their salary?

SELECT name, salary,

    RANK() OVER (ORDER BY salary DESC) AS salary_rank

FROM employees

Explanation: The RANK window function assigns a rank to each employee based on their salary in descending order.

Table:

id name salary
1 Amar 60000
2 Ayush 75000
3 Abhi 75000

Output:

name salary salary_rank
Ayush 75000 1
Abhi 75000 1
Amar 60000 3

 Q3. How do you calculate the moving average of employee salaries over the last 3 rows?

SELECT name, salary,

    AVG(salary) OVER (ORDER BY id ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_avg

FROM employees

Explanation: The AVG window function computes the moving average of salaries, considering the current row and the two preceding rows.

Table:

id name salary
1 Amar 60000
2 Ayush 70000
3 Abhi 80000
4 Sneha 90000

Output:

name salary moving_avg
Amar 60000 60000
Ayush 70000 65000
Abhi 80000 76666.67
Sneha 90000 80000

 Q4. How do you find the first salary in each department?

SELECT name, salary,

       FIRST_VALUE(salary) OVER (PARTITION BY department_id ORDER BY salary) AS first_salary

FROM employees

Explanation: The FIRST_VALUE window function retrieves the first salary within each department, based on salary order.

Table:

id name salary department_id
1 Amar 60000 101
2 Ayush 70000 101
3 Abhi 80000 102
4 Sneha 90000 102

Output:

name salary first_salary
Amar 60000 60000
Ayush 70000 60000
Abhi 80000 80000
Sneha 90000 80000

 Final Thought

SQL isn’t just a technical skill. It’s a way of thinking. A solid understanding of SQL opens doors to high impact roles in data analysis, BI and data engineering. At ConsoleFlare, we train aspiring professionals with hands-on projects, expert led sessions and real world case studies. Whether you’re prepping for an interview or sharpening your data skills, our program ensures you’re not just ready for questions — you’re ready for the job.

For more such content and regular updates, follow us on FacebookInstagramLinkedIn

seoadmin

Leave a Reply

Your email address will not be published. Required fields are marked *

Back To Top