KEEP GOING
[MySQL] LeetCode : Nth highest Salary 본문
반응형
https://leetcode.com/problems/nth-highest-salary/
1. case when 사용
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
RETURN (
# Write your MySQL query statement below.
SELECT CASE WHEN COUNT(tmp.salary) >= n THEN MAX(tmp.salary)
ELSE NULL END
FROM (
SELECT DISTINCT salary
FROM Employee
ORDER BY salary ASC
LIMIT n
)tmp
);
END
2. if 사용
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
RETURN (
# Write your MySQL query statement below.
SELECT IF(COUNT(tmp.salary)>=n,MAX(tmp.salary),NULL)
FROM (
SELECT DISTINCT salary
FROM Employee
ORDER BY salary ASC
LIMIT n
)tmp
);
END
3. limit, offset 사용
DECLARE 추가적인 변수 선언없이 SET N = N-1; 처리로 변수 사용 최소화 가능
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
DECLARE M INT;
SET M = N-1;
RETURN (
# Write your MySQL query statement below.
SELECT DISTINCT salary
FROM Employee
ORDER BY salary ASC
LIMIT M, 1
);
END
- 사용자 정의 함수란 ?
매개변수로 입력받은 값을 함수 내부 쿼리대로 동작하여 특정 값을 출력하는 것을 의미한다. 즉, 말그대로 사용자가 정의한 함수라는 뜻이다.
- 기본 구조
함수에 같은 값을 입력할 때 같은 값을 항상 출력한다면 DETERMINISTIC을 추가한다.
쿼리 내부에서 변수가 필요한 경우 DECLARE을 통해 변수를 지정할 수 있다. 선언한 변수에 값을 추가하고 싶다면 SET을 사용한다. 위에서 풀이한 1번처럼 DECLARE 선언 없이 RETURN 소괄호 안에 쿼리를 삽입하여 출력값을 유도할 수 있다. 즉, RETURN 문 사용은 필수적이지만 DECLARE, SET은 필요에 따라 사용한다.
CREATE FUNCTION '함수명'('매개변수명', '매개변수의 데이터타입')
RETURNS '출력값의 데이터타입' (DETERMINISTIC)
BEGIN
-- 변수 선언시
DECLARE '변수명' '변수의 데이터타입';
-- 변수에 값 대입시
SET '변수명' = '값';
RETURN (쿼리) 혹은 '변수명'
END
- 예시
CREATE FUNCTION CustomerLevel(credit VARCHAR(20))
RETURNS VARCHAR(20) DETERMINISTIC
BEGIN
DECLARE level VARCHAR(20);
IF credit > 50000 THEN
SET level = 'PLATINUM';
ELSE
SET level = 'NOT PLATINUM';
END IF;
RETURN level;
END
- n번째 행 출력하기 (limit, offset)
SELECT * FROM 테이블 LIMIT N-1, 1
SELECT * FROM 테이블 LIMIT 1 OFFSET N-1
반응형
'code review > sql' 카테고리의 다른 글
[MySQL] 2주차 (0) | 2022.03.06 |
---|---|
[MySQL] 1주차 (0) | 2022.02.28 |
[MySQL] 정규 표현식 정리(REGEXP) (0) | 2022.02.09 |
[MySQL] LeetCode : Consecutive-Numbers (0) | 2022.02.07 |
[MySQL] LeetCode : Department Top Three Salaries (0) | 2022.02.04 |
Comments