문제

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

 

풀이

SQL로 함수를 처음 구성해봐서 로직이 어떤식으로 돌아가는지 이해에 초점을 맞추고 진행했습니다.

우선 전체 코드를 보여드리고 코드를 나누어가면서 설명하고자 합니다.

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
SET N = N-1;
  RETURN (
      # Write your MySQL query statement below.
      SELECT DISTINCT(salary) from Employee order by salary DESC
      LIMIT 1 OFFSET N
  );
END

 

기본적인 함수의 구성

MySQL에서 기본적인 함수의 형태는 다음과 같습니다.

CREATE FUNCTION function_name (parameter_name parameter_type, ...)
RETURNS return_data_type
BEGIN
    -- 함수 본문
    DECLARE variable_name variable_type;
    -- SQL 문장
    RETURN return_value;
END;

 

추가 예시로 덧셈 함수를 들어보겠습니다.

CREATE FUNCTION add_numbers (a INT, b INT) RETURNS INT
BEGIN
    RETURN a + b;
END;

 

코드 분석

- 함수 선언

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT

: 정수형 N을 인자로 받고 정수값을 반환합니다.

 

- N값 조정

SET N = N-1;

: OFFSET 구문이 0부터 시작하기 때문에 첫번째로 높은 급여를 가져오려면 OFFSET이 0이되도록 만들어야하기 때문입니다.

 

- SQL 쿼리

RETURN (
    # Write your MySQL query statement below.
    SELECT DISTINCT(salary) FROM Employee ORDER BY salary DESC
    LIMIT 1 OFFSET N
);

: 문제의 조건에 따라서 Employee의 salary를 내림차순으로 나열하고 OFFSET을 이용해 상위 N개의 급여를 선택합니다.

LIMIT을 사용해서 N번째로 높은 급여 단하나를 반환합니다.

+ Recent posts