[SQL 심화] 리트코드 1문제 :: 177. Nth Highest Salary

Hyeon·2024년 11월 4일

SQL 문제 풀이

목록 보기
35/61

해당 문제는 함수를 생성하는 문제
해석을 참고하여 쿼리를 작성함

✅1.문제

n번째로 큰 급여를 반환하는 쿼리를 작성하기
n번째로 큰 급여의 정보가 없다면 null을 반환하기

create funciton mysql

✅2.사용자함수란?

사용자가 생성하는 함수로 반복되는 쿼리나 자주 사용이 되는 쿼리를 작성하기 번거로울 때
함수로 지정해서 호출하는 함수이다.

✅3.사용자함수 쿼리 작성 단계

1.create function : 함수 지정

함수명과 파라미터, 데이터타입

2.returns : 출력될 값 지정하기

데이터타입, 결과값이 다를 때와 같을 때 구분하기

3.begin

: 쿼리문 작성하기 & 반환값구하기

✅4.사용자함수 기본적인 형태는?

create funtion 함수명(매개변수 자료형) returns 반환 자료형
begin
	sql 쿼리문 1;
	sql 쿼리문 2;
	return 반환값
end;

✅5.예시는?

1.제곱을 처리하는 사용자 함수 구하기

create function square(a int) returns double
begin 
return a*a;
end

2.case when 구문을 활용한 등급 구분 사용자 함수 구하기

CREATE FUNCTION CustomerLevel(credit DECIMAL(10, 2)) 
    RETURNS VARCHAR(20) DETERMINISTIC   
BEGIN
    DECLARE Level VARCHAR(20);   
    IF credit > 50000 THEN   
        SET Level = 'PLATINUM';
    ELSEIF (credit <= 50000 AND credit >= 10000) THEN
        SET Level = 'GOLD';
    ELSEIF (credit < 10000 THEN
        SET Level = 'SILVER';
    END IF;  
    RETURN (Level);   
END
 

SELECT CustomerLevel(creditLimit)
FROM customer

출처
https://mizykk.tistory.com/122

✅6.사용자 함수 활용 177 문제 풀이

-- n번째로 큰 급여를 반환해야한다.

CREATE FUNCTION getNthHighestSalary(N INT) 
RETURNS INT
BEGIN

-- offset은 n-1의 행을 출력시키므로 나올 반환 결과물을 n-1이라고 수정해주기
SET N=N-1;

  RETURN (
-- n-1번째의 행 1개 출력시키기
      SELECT DISTINCT salary FROM Employee ORDER BY salary DESC 
      LIMIT 1 OFFSET N      
  );
END

주의사항

반환시 select 구문을 활용하여 데이터 값을 바로 출력할 수 있도록 사용자함수를 만들었음
따라서 따로 select 절을 작성하지 않아도 바로 값이 출력

0개의 댓글