본문 바로가기
TIL - 프로그래밍/SQL

[리트코드] 177. Nth Highest Salary - MySQL

by chaemj97 2023. 7. 8.
728x90

https://leetcode.com/problems/nth-highest-salary/

 

Nth Highest Salary - LeetCode

Can you solve this real interview question? Nth Highest Salary - Table: Employee +-------------+------+ | Column Name | Type | +-------------+------+ | id | int | | salary | int | +-------------+------+ id is the primary key column for this table. Each row

leetcode.com


  • 문제
    • N번째로 높은 급여를 출력하라. 만약 없으면 NULL 출력

  • 풀이 1 - 사용자 정의 함수 + 서브쿼리
    • 급여를 내림차순으로 정렬하여 N개를 뽑기 (sub 테이블)
    • 그 N개의 급여 중 가장 작은 급여 == N번째 급여
      • sub 테이블에 행 갯수가 N보다 작다 == N번째 급여가 없다 -> NULL 출력하라
SELECT IF(COUNT(sub.salary) < N, NULL, MIN(sub.salary))
FROM (
    SELECT DISTINCT salary
    FROM Employee
    ORDER BY salary DESC
    LIMIT N
);
  • 정답 코드 1
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  RETURN (
        SELECT IF(COUNT(sub.salary) < N, NULL, MIN(sub.salary))
        FROM (
            SELECT DISTINCT salary
            FROM Employee
            ORDER BY salary DESC
            LIMIT N
        ) AS sub
  );
END

 

  • 풀이 2 - 사용자 정의 함수 + OFFSET
    • 급여를 내림차순으로 정렬
    • N번째 급여를 가져오기
      • LIMIT 1 OFFSET N-1 : 상위 N-1개를 버리고 다음 1개 -> N번째 행만 의미
    • RETURN 안에서 파라미터를 수정할 수 없다.
      • SET을 통해 수정
      • (DECLARE를 통해서도 가능)
  • 정답 코드 2
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  SET N = N-1;
  RETURN (
        SELECT DISTINCT Salary
        FROM Employee
        ORDER BY Salary DESC
        LIMIT 1 OFFSET N
  );
END
728x90
반응형

댓글