240906_TIL

J Lee·2024년 9월 6일

아무리 사소하더라도 배움이 없는 날은 없다.

SQL 문제풀이 복습

문제 링크
세 번째로 풀어보는 문제.
난이도는 hard지만 어렵지 않다.
그냥 rank가 아니라 dense_rank를 쓴다는 점에만 주의 (공백이 없어야 하므로)

WITH a
     AS (SELECT departmentid,
                NAME,
                salary,
                Dense_rank()
                  OVER(
                    partition BY departmentid
                    ORDER BY salary DESC) AS "ranking"
         FROM   employee)
SELECT d.NAME   AS "Department",
       a.NAME   AS "Employee",
       a.salary AS "Salary"
FROM   a
       LEFT JOIN department d
              ON a.departmentid = d.id
WHERE  ranking <= 3;

문제 링크
일단 문제로 제시되어 있어서 풀긴 풀었는데,
실무에서 delete를 쓸 일이 과연 있을까 싶다...🤔

DELETE p1
FROM   person p1
       JOIN person p2
         ON p1.email = p2.email
            AND p1.id > p2.id;

문제 링크
이것도 세 번째로 풀어보는 문제.

예전처럼 window함수나 서브쿼리를 쓸 필요도 없이,
그냥 간단하게 join의 조건만 줄 수 있으면 해결되는 문제다.

답이 똑같이 나온다면 무조건 간단한 게 좋은 것 같다.

SELECT w2.id
FROM   weather w1
       JOIN weather w2
         ON Datediff(w2.recorddate, w1.recorddate) = 1
            AND w2.temperature - w1.temperature > 0;
profile
기본기를 소홀히 하지 말자

0개의 댓글