728x90
1. 문제 :
Employee 테이블에서 두 번째로 높은 급여를 가져오는 SQL 쿼리를 작성하십시오.
예를 들어, 위의 Employee 테이블이 주어지면 쿼리는 두 번째로 높은 급여로 200을 반환해야 합니다. 두 번째로 높은 급여가 없는 경우 쿼리는 null을 반환해야 합니다.
2. 정답 : Description 옆에 Solution 탭으로 이동 또는
https://nifannn.github.io/2017/10/26/SQL-Notes-Leetcode-176-Second-Highest-Salary/ 참고
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
'데이터베이스 > 쿼리 문제' 카테고리의 다른 글
182. Duplicate Emails (leetCode 코딩 알고리즘 문제) (0) | 2021.09.05 |
---|---|
181. Employees Earning More Than Their Managers (leetCode 코딩 알고리즘 문제) (4) | 2021.08.28 |
175. Combine Two Tables (leetCode 코딩 알고리즘 문제) (382) | 2021.08.27 |