TIL - 250512(SQL_leetcode_3개)

오정수·2025년 5월 12일

TIL

목록 보기
67/78

문제1(링크)

SELECT
    firstName
    , lastName
    , city
    , state
FROM Person p
LEFT JOIN Address a
ON p.personId = a.personId

비고 : 나는 JOIN을 할 때 컬럼명이 같다는 전제하에 USING을 사용하는데 leetcode에서 runtime을 알려줘서 조금 더 최적화를 하기 좋은 코드를 찾기 좋은 거 같다. USING보다 ON이 더 runtime을 줄일 수 있다.

문제2(링크)

SELECT
    salary
FROM (
    SELECT
        *
        , RANK() OVER (ORDER BY salary DESC) r_num
    FROM Employee
) a
WHERE r_num = 2;

SELECT (
    SELECT DISTINCT salary
    FROM Employee
    ORDER BY salary DESC
    LIMIT 1 OFFSET 1
) AS SecondHighestSalary

비고 : 첫번째 쿼리로 문제를 풀었는데 2등 샐러리가 없을 경우 NULL을 부여하지 않아서 다시 작성했다. OFFSET을 활용해서 완료했다.

문제3(링크)

# 정답 코드
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  DECLARE offset_val INT;
  SET offset_val = N - 1;
  RETURN (
    SELECT DISTINCT salary
    FROM Employee
    ORDER BY salary DESC
    LIMIT 1 OFFSET offset_val
  );
END
# 시작 코드
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  RETURN (
      # Write your MySQL query statement below.

  );
END

비고 : 시작 코드에서부터 신기했다. SQL에서도 함수를 만들 수 있다는 사실에 놀라웠다. OFFSET에 N-1을 직접적으로 적었더니 오류가 났다. 찾아보니까 변수 설정할 수가 있었다.
파이썬이랑 비슷해서 신기했다. DECLARE로 변수 속성 설정을 하고 SET을 통해 변수 값 설정을 한다.

profile
안녕하세요 오정수입니다

0개의 댓글