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;