SELECT
score
, DENSE_RANK() OVER (ORDER BY score DESC) AS `rank`
FROM Scores
비고 : 함수명이랑 같은 컬럼명을 쓰고 싶으면 '`'를 잘 활용하자.
`
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()는 이후 값. 헷갈릴 수 있으니 잘 기억하자.
SELECT
a.name AS Employee
FROM Employee a
LEFT JOIN Employee b
ON a.managerId = b.id
WHERE a.salary > b.salary
# 코드 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처럼 간단하게 할 수 있는 건 간단하게 하는 게 좋은 거 같다.