기존학습자료/기초 스킬

사용자 함수

gooreumsea 2023. 6. 25. 05:48

Leetcode 177 - Nth Highest Salary

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

 

CASE 문

CREATE FUNCTION getNthHighestSalary (N INT) 
RETURNS INT

BEGIN
  RETURN (
            SELECT 
                  CASE WHEN COUNT(sub.Salary) < N THEN NULL
                      ELSE MIN(sub.Salary) -- 가장 작은 값
                  END
            FROM(
                  SELECT DISTINCT Salary
                  FROM Employee
                  ORDER BY Salary DESC
                  LIMIT N
                ) sub
  
        );
END

IF 문  >>>  건이 순차적으로 실행되어야 하는 상황에는 CASE가 적합 (구간을 특정 기준으로 나눠야 할 때)

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
                ) sub
        );
END

LIMIT 심화 
- return 구문에 서브쿼리를 활용하지 않는다면, 쿼리의 결과가 나오지 않을 시 자동으로 NULL 값 반환

CREATE FUNCTION getNthHighestSalary (N INT) 
RETURNS INT

BEGIN

  DECLARE A INT;
  SET A = N -1;      -- equal SET N = N-1;   >>> LIMIT N-1,1
  RETURN (

            SELECT DISTINCT Salary
            FROM Employee
            ORDER BY Salary DESC
            # LIMIT A, 1       >>> 맨 앞에서 A개를 날리고 그 다음 1개를 가져와
            LIMIT 1 OFFSET A.  >>> 맨 앞에서 A개를 날리고 그 다음 1개를 가져와

        );
END

'기존학습자료 > 기초 스킬' 카테고리의 다른 글

고유값 만들기  (0) 2023.07.02
기초 함수 세부 활용  (0) 2023.06.25
정규표현식  (0) 2023.06.25