TIL - 250513(SQL_leetcode_3개)

오정수·2025년 5월 13일

TIL

목록 보기
68/78

문제1(링크)

SELECT
    score
    , DENSE_RANK() OVER (ORDER BY score DESC) AS `rank`
FROM Scores

비고 : 함수명이랑 같은 컬럼명을 쓰고 싶으면 '`'를 잘 활용하자.

`

문제2(링크)

SELECT
    num AS ConsecutiveNums
FROM (
SELECT
    *
    , LAG(num) OVER (ORDER BY id) prev_num
    , LEAD(num) OVER (ORDER BY id) next_num
FROM Logs
) a
WHERE num = prev_num
AND num = next_num

비고 : LAG()는 이전 값, LEAD()는 이후 값. 헷갈릴 수 있으니 잘 기억하자.

문제3(링크)

SELECT
    a.name AS Employee
FROM Employee a
LEFT JOIN Employee b
ON a.managerId = b.id
WHERE a.salary > b.salary

문제4(링크)

# 코드 1
SELECT
    DISTINCT email AS Email
FROM (
    SELECT
        *
        , COUNT(*) OVER (PARTITION BY email) cnt
    FROM Person
) a
WHERE cnt = 2

# 코드 2
SELECT
    email
FROM Person
GROUP BY email
HAVING COUNT(*) > 1;

비고 : 코드1은 윈도우 함수를 이용해서 한 건데 너무 복잡했다. 코드2처럼 간단하게 할 수 있는 건 간단하게 하는 게 좋은 거 같다.

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

0개의 댓글