목록SQL (7)
우노
문제 링크 https://leetcode.com/problems/game-play-analysis-i/description/ 풀이 각 플레이어의 첫 로그인 날짜를 출력하는 문제입니다. GROUP BY와 MIN을 사용해 해결할 수 있습니다. 코드 SELECT player_id, MIN(event_date) as first_login FROM Activity GROUP BY player_id
문제 링크 https://leetcode.com/problems/rising-temperature/ 풀이 어제의 온도보다 오늘의 온도가 더 높은 날짜를 모두 찾는 문제입니다. SELF JOIN을 사용해 해결할 수 있으며, ON 절에서, 이전 날짜와의 차이가 1일이며, 오늘의 온도가 더 높은 데이터들을 추출하면 됩니다. 코드 SELECT L.id AS 'id' FROM Weather AS L JOIN Weather AS R ON DATEDIFF(L.recordDate, R.recordDate) = 1 AND L.temperature > R.temperature
문제 링크 https://leetcode.com/problems/rank-scores/ 풀이 점수 순위를 매기는 SQL 쿼리를 작성하면 되는 문제입니다. Window Function의 DENSE_RANK()를 사용해 해결할 수 있습니다. DENSE_RANK()는, 동일값인 경우엔 동일 순위를 부여하고, 이후 순위는 연이어서 부여하는 기능입니다. 1 2 2 3 전체 쿼리는 아래와 같습니다. 전체 쿼리 SELECT score, DENSE_RANK() OVER(ORDER BY score DESC) AS 'rank' FROM Scores
문제 링크 https://leetcode.com/problems/second-highest-salary/ 풀이 두 번째로 높은 급여가 존재한다면 출력하고, 존재하지 않는다면 NULL을 출력하는 문제입니다. WHERE 절에 서브쿼리를 사용해, salary의 최대값보다 작은 salary들 중 최대값을 출력하면 됩니다. 코드 SELECT max(salary) AS SecondHighestSalary FROM Employee WHERE salary < ( SELECT max(salary) FROM Employee )
문제 링크 https://leetcode.com/problems/department-top-three-salaries/ 풀이 부서 별 급여 3순위에 드는 사원들을 출력하면 되는 문제입니다. Window Function의 DENSE_RANK와 JOIN을 사용해 해결할 수 있습니다. DENSE_RANK()는, 동일값인 경우엔 동일 순위를 부여하고, 이후 순위를 연이어서 부여하는 기능입니다. 1 2 2 3 먼저, 아래와 같은 서브쿼리를 작성합니다. SELECT id, name, salary, departmentId, DENSE_RANK() OVER(PARTITION BY departmentId ORDER BY salary DESC) AS salary_rank FROM Employee | id | name | ..
문제 링크 https://leetcode.com/problems/department-highest-salary/ 풀이 각 부서에서 급여가 가장 높은 직원을 찾는 SQL 쿼리를 작성하면 됩니다. Window Function과 JOIN을 사용해 해결할 수 있습니다. 먼저, 아래와 같은 서브쿼리를 작성합니다. SELECT id, name, salary, departmentId, MAX(salary) OVER(PARTITION BY departmentId) AS max_salary FROM Employee | id | name | salary | departmentId | max_salary | | -- | ----- | ------ | ------------ | ---------- | | 1 | Joe | 7..
문제 링크 https://leetcode.com/problems/consecutive-numbers/ 풀이 연속으로 세 번 이상 나타나는 모든 숫자를 찾는 SQL 쿼리를 작성하면 되는 문제입니다. Window Function과 LEAD를 사용해 해결할 수 있습니다. 먼저, 아래와 같은 서브쿼리를 작성합니다. SELECT num, LEAD(num, 1) over(ORDER BY id) AS next, LEAD(num, 2) over(ORDER BY id) AS nextafter FROM Logs | num | next | nextafter | | --- | ---- | --------- | | 1 | 1 | 1 | | 1 | 1 | 2 | | 1 | 2 | 1 | | 2 | 1 | 2 | | 1 | 2 |..