데이터베이스/쿼리 문제

176. Second Highest Salary (leetCode 코딩 알고리즘 문제)

daslyee 2021. 8. 28. 00:38
728x90

1. 문제 : 

Employee 테이블에서 두 번째로 높은 급여를 가져오는 SQL 쿼리를 작성하십시오.

예를 들어, 위의 Employee 테이블이 주어지면 쿼리는 두 번째로 높은 급여로 200을 반환해야 합니다. 두 번째로 높은 급여가 없는 경우 쿼리는 null을 반환해야 합니다.

 

2. 정답 : Description 옆에 Solution 탭으로 이동 또는 

https://nifannn.github.io/2017/10/26/SQL-Notes-Leetcode-176-Second-Highest-Salary/ 참고

 

SQL Notes: Leetcode#176 Second Highest Salary - Memogrocery

Problem Write a SQL query to get the second highest salary from the Employee table. Id Salary 1 100 2 200 3 300 For example, given the above Employee table, the query should return 200 as the second highest salary. If there is no second highest salary, the

nifannn.github.io

 

3. 정답 해설 : 

정답을 찾아봤다면 정답이 여러개란 걸 확인 할 수 있을 것이다. 이 것은 당연한 것이니 본인에게 맞는 쿼리로 이해하고 넘어가길 바란다.

 

1) 첫번째

최대 값을 우선 구할 것이며, 그 중 MAX 함수를 이용하여 가장 큰 값이 구해보자.

즉, Employee 테이블의

SELECT MAX(salary) FROM Employee 
-- result : 300

값은 id 3의 값인 300 이 나올 것이다.

그렇다면 두 번째로 높은 급여는 해당 위 쿼리를 포함 안시키면 되겠구나 생각이 들수도 있다.

 

2) 두번째

두 번째로 높은 급여가 없는 경우 쿼리는 null을 반환해야 되는데, 아까 MAX 함수를 소환해보자.

SELECT MAX(salary) FROM Employee WHERE Id = 4
-- result : null

Id의 값이 4인 것이 없기 때문에 null 을 내뱉게 된다. 

 

그렇다면 두개를 잘만 지지고 볶으면 원하는 답이 나올 것 같다.

 

두개를 잘 조합한 결과는 아래와 같다.

 

SELECT MAX(emp1.salary) AS SecondHighestSalary
FROM Employee emp1
WHERE emp1.salary NOT IN (SELECT MAX(semp1.salary) FROM Employee semp1) 

-- result : 200

 

적어놨지만 이 문제의 정답은 매우 다양하다.

728x90