이 문제는 전체 직원 중에서 두 번째로 높은 급여를 구하는 문제이다.
주의할 점은 다음과 같다.
처음에 내가 접근했던 방법은 다음과 같다.
SELECT MAX(salary) as second_highest_salary
FROM employee
WHERE salary != (
SELECT MAX(salary)
FROM employee
);
이렇게 문제를 풀었던 이유는
제출했을 경우 틀린 답은 아니라고 나오지만
이 방식대로 접근하게 된다면 약간의 수정할 부분이 있다고 생각했다.
WHERE salary != (
SELECT MAX(salary)
FROM employee
);
원래 작성했던 쿼리문도 틀린 쿼리문은 아니지만 !=을 사용하는 것 보다 <를 사용하는 방법이 의미를 더 명확하게 보여주는 것 같다.
WHERE salary < (
SELECT MAX(salary)
FROM employee
);
SELECT MAX(salary) as second_highest_salary
문제의 조건에서 동일한 급여가 여러 개있으면 하나만 출력하라고 명시되어 있다.
물론 MAX() 함수를 사용하기 때문에 1개만 나오기 때문에 문제는 없지만 의미를 더 명확하게 하려면 DISTINCT를 같이 사용해주는 것이 좋은 것 같다.
SELECT MAX(DISTINCT salary) as second_highest_salary
SELECT MAX(DISTINCT salary) as second_highest_salary
FROM employee
WHERE salary < (
SELECT MAX(salary)
FROM employee
);
