0% found this document useful (0 votes)
18 views

MySQL Interview Questions.!!

Uploaded by

cours important
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
18 views

MySQL Interview Questions.!!

Uploaded by

cours important
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 13

krishnaik06 / The-Grand-Complete-Data-Science-Materials Public

Code Issues Pull requests 43

main

The-Grand-Complete-Data-Science-Materials / Complete MySQL Interview Materials


/ Complex SQL Interview Questions- Part 2.md

krishnaik06 Add files via upload 5 months ago

563 lines (459 loc) · 12.9 KB

Preview Code Blame Raw

Here are more complex interview questions involving nested subqueries:

53. Retrieve the departments where the total salary expenditure exceeds the
average total salary expenditure across all departments.

Answer:

SELECT department_id
FROM employees
GROUP BY department_id
HAVING SUM(salary) > (
SELECT AVG(total_salary)
FROM (
SELECT department_id, SUM(salary) as total_salary
FROM employees
GROUP BY department_id
) AS subquery
);

54. Find the employee with the third highest salary without using the LIMIT clause.

Answer:

SELECT name, salary


FROM employees e1
WHERE 2 = (
SELECT COUNT(DISTINCT e2.salary)
FROM employees e2
WHERE e2.salary > e1.salary
);

55. Identify departments that have less than the company-wide median number of
employees.

Answer:

SELECT department_id
FROM employees
GROUP BY department_id
HAVING COUNT(id) < (
SELECT AVG(employee_count)
FROM (
SELECT department_id, COUNT(id) as employee_count
FROM employees
GROUP BY department_id
) AS subquery
);

56. Get the most common job title among employees who earn above the company
average.

Answer:

SELECT job_title
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees)
GROUP BY job_title
ORDER BY COUNT(*) DESC
LIMIT 1;

57. Identify employees who earn more than the average salary in both their
department and the company.

Answer:

SELECT id, name, salary


FROM employees e1
WHERE salary > (
SELECT AVG(salary)
FROM employees
WHERE department_id = e1.department_id
)
AND salary > (
SELECT AVG(salary)
FROM employees
);

58. Retrieve the month (in numbers) with the highest total sales from a table of daily
sales.

Answer:

SELECT MONTH(date) as sales_month


FROM sales
GROUP BY MONTH(date)
ORDER BY SUM(amount) DESC
LIMIT 1;

59. Get the department that has the maximum difference between the highest and
lowest salaries.

Answer:

SELECT department_id, (MAX(salary) - MIN(salary)) as salary_difference


FROM employees
GROUP BY department_id
HAVING salary_difference = (
SELECT MAX(max_salary - min_salary)
FROM (
SELECT department_id, MAX(salary) as max_salary, MIN(salary) as m
FROM employees
GROUP BY department_id
) AS subquery
);

60. Find the employee who earns the median salary in each department.

Answer:

SELECT e1.department_id, e1.name, e1.salary


FROM employees e1
WHERE (
SELECT COUNT(*)
FROM employees e2
WHERE e2.department_id = e1.department_id AND e2.salary <= e1.salary
) = (
SELECT COUNT(*)
FROM employees e3
WHERE e3.department_id = e1.department_id AND e3.salary >= e1.salary
);

61. Retrieve employees who earn more than their respective department's median
salary.

Answer:

SELECT e1.name, e1.salary, e1.department_id


FROM employees e1
WHERE e1.salary > (
SELECT AVG(salary)
FROM (
SELECT salary
FROM employees e2
WHERE e2.department_id = e1.department_id
ORDER BY salary
LIMIT 2 - (SELECT COUNT(*) FROM employees e3 WHERE e3.department_
OFFSET (SELECT (COUNT(*) - 1) / 2 FROM employees e4 WHERE e4.depa
) AS median_subquery
);

62. Identify the departments where the minimum salary is greater than the maximum
salary of at least one other department.

Answer:

SELECT DISTINCT e1.department_id


FROM employees e1
WHERE e1.salary = (
SELECT MIN(salary)
FROM employees
WHERE department_id = e1.department_id
)
AND e1.salary > ANY (
SELECT MAX(salary)
FROM employees
GROUP BY department_id
);
63. Find employees whose salary ranks in the top 3 within their department.

Answer:

SELECT e1.name, e1.salary, e1.department_id


FROM employees e1
WHERE (
SELECT COUNT(DISTINCT e2.salary)
FROM employees e2
WHERE e2.department_id = e1.department_id AND e2.salary > e1.salary
) < 3;

64. Identify the department with the most diverse salary distribution, i.e., the largest
difference between the highest and lowest salaries.

Answer:

SELECT department_id
FROM employees
GROUP BY department_id
HAVING (MAX(salary) - MIN(salary)) = (
SELECT MAX(salary_range)
FROM (
SELECT (MAX(salary) - MIN(salary)) as salary_range
FROM employees
GROUP BY department_id
) AS subquery
);

65. Retrieve the employees who do not have the lowest salary in their department
but earn less than the department average.

Answer:

SELECT e1.name, e1.salary, e1.department_id


FROM employees e1
WHERE e1.salary NOT IN (
SELECT MIN(e2.salary)
FROM employees e2
WHERE e2.department_id = e1.department_id
)
AND e1.salary < (
SELECT AVG(e3.salary)
FROM employees e3
WHERE e3.department_id = e1.department_id
);

66. Determine which departments have an average salary close to the company's
median salary. Assume 'close' means a difference of less than 1000.

Answer:

SELECT department_id
FROM employees
GROUP BY department_id
HAVING ABS(AVG(salary) - (
SELECT AVG(median_salary)
FROM (
SELECT salary AS median_salary
FROM employees
ORDER BY salary
LIMIT 2 - (SELECT COUNT(*) FROM employees) MOD 2
OFFSET (SELECT (COUNT(*) - 1) / 2 FROM employees)
) AS median_subquery
)) < 1000;

67. Find the departments where the total number of employees is above the
company's average.

Answer:

SELECT department_id
FROM employees
GROUP BY department_id
HAVING COUNT(id) > (
SELECT AVG(employee_count)
FROM (
SELECT COUNT(id) AS employee_count
FROM employees
GROUP BY department_id
) AS avg_subquery
);

68. Identify employees who earn more than the second highest earner in their
respective department.

Answer:
SELECT e1.name, e1.salary, e1.department_id
FROM employees e1
WHERE e1.salary > (
SELECT MAX(e2.salary)
FROM employees e2
WHERE e2.department_id = e1.department_id AND e2.salary < (
SELECT MAX(e3.salary)
FROM employees e3
WHERE e3.department_id = e1.department_id
)
);

69. Find the departments where the top earner makes at least twice as much as the
second top earner.

Answer:

SELECT department_id
FROM employees
GROUP BY department_id
HAVING MAX(salary) >= 2 * (
SELECT MAX(salary)
FROM employees e2
WHERE e2.department_id = employees.department_id AND salary < MAX(emp
);

70. Retrieve the employees who have been in the company for longer than the
average tenure of their respective department managers.

Answer:

SELECT e1.name, e1.join_date


FROM employees e1
WHERE DATEDIFF(CURDATE(), e1.join_date) > (
SELECT AVG(DATEDIFF(CURDATE(), e2.join_date))
FROM employees e2
WHERE e2.id IN (
SELECT manager_id
FROM employees
WHERE department_id = e1.department_id
)
);
71. Identify the department with the smallest gap between the lowest and average
salary.

Answer:

SELECT department_id
FROM employees
GROUP BY department_id
HAVING (AVG(salary) - MIN(salary)) = (
SELECT MIN(gap)
FROM (
SELECT (AVG(salary) - MIN(salary)) AS gap
FROM employees
GROUP BY department_id
) AS gap_subquery
);

**72. Identify the employees who earn below the average salary of their p

**Answer**:

```sql
SELECT e1.name, e1.salary, YEAR(e1.join_date) AS join_year
FROM employees e1
WHERE e1.salary < (
SELECT AVG(e2.salary)
FROM employees e2
WHERE YEAR(e2.join_date) = YEAR(e1.join_date)
);

73. Retrieve the employee who has the closest salary to their department's median
but isn't the median earner.

Answer:

SELECT e1.name, e1.salary


FROM employees e1
WHERE e1.department_id IN (
SELECT department_id
FROM employees
)
AND e1.salary <> (
SELECT AVG(median_salary)
FROM (
SELECT salary AS median_salary
FROM employees e2
WHERE e2.department_id = e1.department_id
ORDER BY salary
LIMIT 2 - (SELECT COUNT(*) FROM employees e3 WHERE e3.department_
OFFSET (SELECT (COUNT(*) - 1) / 2 FROM employees e4 WHERE e4.depa
) AS median_subquery
)
ORDER BY ABS(e1.salary - (
SELECT AVG(median_salary)
FROM (
SELECT salary AS median_salary
FROM employees e5
WHERE e5.department_id = e1.department_id
ORDER BY salary
LIMIT 2 - (SELECT COUNT(*) FROM employees e6 WHERE e6.department_
OFFSET (SELECT (COUNT(*) - 1) / 2 FROM employees e7 WHERE e7.depa
) AS median_subquery2
))
LIMIT 1;

74. Determine the departments whose average tenure (time since joining) is greater
than the company average.

Answer:

SELECT department_id
FROM employees
GROUP BY department_id
HAVING AVG(DATEDIFF(CURDATE(), join_date)) > (
SELECT AVG(DATEDIFF(CURDATE(), join_date))
FROM employees
);

75. Identify departments where more than half of the employees earn above the
company's median salary.

Answer:

SELECT e1.department_id
FROM employees e1
WHERE e1.salary > (
SELECT AVG(median_salary)
FROM (
SELECT salary AS median_salary
FROM employees
ORDER BY salary
LIMIT 2 - (SELECT COUNT(*) FROM employees) MOD 2
OFFSET (SELECT (COUNT(*) - 1) / 2 FROM employees)
) AS median_subquery
)
GROUP BY e1.department_id
HAVING COUNT(e1.id) > 0.5 * (
SELECT COUNT(*)
FROM employees e2
WHERE e2.department_id = e1.department_id
);

76. Find employees who earn a salary in the top 3 of their department but are not in
the top 10 company-wide.

Answer:

SELECT e1.name, e1.salary, e1.department_id


FROM employees e1
WHERE (
SELECT COUNT(DISTINCT e2.salary)
FROM employees e2
WHERE e2.department_id = e1.department_id AND e2.salary > e1.salary
) < 3
AND e1.salary NOT IN (
SELECT DISTINCT salary
FROM employees
ORDER BY salary DESC
LIMIT 10
);

77. Identify employees whose salary is above the average salary of the two
departments with the highest average salaries.

Answer:

SELECT e1.name, e1.salary


FROM employees e1
WHERE e1.salary > (
SELECT AVG(department_avg)
FROM (
SELECT department_id, AVG(salary) AS department_avg
FROM employees
GROUP BY department_id
ORDER BY department_avg DESC
LIMIT 2
) AS top_department_subquery
);

78. Find employees who have a manager earning less than the lowest salary in their
department.

Answer:

SELECT e1.name, e1.salary


FROM employees e1
JOIN employees e2 ON e1.manager_id = e2.id
WHERE e2.salary < (
SELECT MIN(e3.salary)
FROM employees e3
WHERE e3.department_id = e1.department_id
);

79. Identify the department with the least difference between the top earner and the
average salary of the department.

Answer:

SELECT department_id
FROM employees
GROUP BY department_id
HAVING (MAX(salary) - AVG(salary)) = (
SELECT MIN(top_minus_avg)
FROM (
SELECT (MAX(salary) - AVG(salary)) AS top_minus_avg
FROM employees
GROUP BY department_id
) AS difference_subquery
);

80. Retrieve the employees who have the same rank (in terms of salary) in their
department as they do in the company overall.

Answer:

SELECT e1.name, e1.salary


FROM employees e1
WHERE (
SELECT COUNT(DISTINCT e2.salary)
FROM employees e2
WHERE e2.department_id = e1.department_id AND e2.salary > e1.salary
) = (
SELECT COUNT(DISTINCT e3.salary)
FROM employees e3
WHERE e3.salary > e1.salary
);

81. Determine the departments where the third-highest earner makes more than
double the department's average salary.

Answer:

SELECT department_id
FROM employees e1
WHERE (
SELECT DISTINCT salary
FROM (
SELECT salary
FROM employees e2
WHERE e2.department_id = e1.department_id
ORDER BY e2.salary DESC
LIMIT 3
) AS third_top_salary_subquery
ORDER BY salary
LIMIT 1 OFFSET 2
) > 2 * (
SELECT AVG(e3.salary)
FROM employees e3
WHERE e3.department_id = e1.department_id
)
GROUP BY department_id;

82. Find employees who have more direct reports (subordinates) than their manager.

Answer:

SELECT e1.name
FROM employees e1
WHERE (
SELECT COUNT(*)
FROM employees e2
WHERE e2.manager_id = e1.id
) > (
SELECT COUNT(*)
FROM employees e3
WHERE e3.manager_id = e1.manager_id
);

You might also like