SELECT
firstName
, lastName
, city
, state
FROM Person p
LEFT JOIN Address a
ON p.personId = a.personId
비고 : 나는 JOIN을 할 때 컬럼명이 같다는 전제하에 USING을 사용하는데 leetcode에서 runtime을 알려줘서 조금 더 최적화를 하기 좋은 코드를 찾기 좋은 거 같다. USING보다 ON이 더 runtime을 줄일 수 있다.
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을 활용해서 완료했다.
# 정답 코드
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을 통해 변수 값 설정을 한다.