본문 바로가기

Algorithm/MySQL

(75)
[LeetCode] 177. Nth Highest Salary (MySQL) 문제 Employee 테이블에서 n번째로 높은 salary 값을 출력하라 예를 들어 n이 2이면 2번째로 높은 값인 200을 출력 만약 n번째로 높은 salary가 없으면 null을 출력 코드 CASE문으로 풀기 조건이 여러 개이고, 순차적으로 실행해야 하는 환경에 사용 1. SELECT 절로 먼저 뽑아보기 SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT N -- N = 2일 경우 2개의 레코드 값만 갖게 됨 2. 서브쿼리 SELECT MIN sub.Salary FROM ( SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT N ) sub 3. Case -- n번째의 sala..
[해커랭크(HackerRank)] Challenges (MySQL) 문제 줄리아는 학생들에게 코딩 과제를 만들라고 요청했다 hacker_id, 이름 및 각 학생이 낸 총 과제 수를 출력한다 총 과제 수를 기준으로 내림차순으로 정렬한다 한 명 이상의 학생이 동일한 수의 과제를 낸 경우 hacker_id 별로 결과를 정렬한다 한 명 이상의 학생이 동일한 수의 도전 과제를 냈고 그 수가 최대 도전 횟수보다 적다면, 그 학생들은 결과에서 제외한다 Hackers 테이블 : hacker_id와 name Challenges 테이블 : 도전한 id인 challenge_id와 문제를 만든 학생의 id인 hacker_id 코드 1. 각 학생이 낸 총 과제 수 출력 SELECT h.hacker_id, h.name, COUNT(*) FROM hackers h INNER JOIN challen..
[LeetCode] 185. Department Top Three Salaries (MySQL) 문제 부서 별 고소득자 구하기 해당 부서의 top 3에 해당하는 급여를 받는 직원 구하기 코드 1. 부서 별 고소득자를 구해야하기 때문에 순위 정하는 함수 DENSE_RANK() 사용 top3에 해당하는 직원이 아니라 top3 급여를 받는 직원을 구하면 되기 때문에 DENSE_RANK()를 사용했다. DENSE_RANK()와 RANK() 차이점은 RANK()는 2명이 90000이고 90000이 max값이면 둘 다 1위가 되고 다음 순위가 3위가 되는데 DENSE_RANK()는 1위가 2번이면 둘 다 1위가 되고 그 다음 순위는 2위가 된다. SELECT departmentId , name , salary , DENSE_RANK() OVER (partition by departmentId ORDER BY ..
[LeetCode] 180. Consecutive Numbers (MySQL) 문제 연속해서 세 번 이상 나타나는 모든 숫자를 찾아라 순서 상관없음 코드 Join select distinct a.num as ConsecutiveNums from logs a inner join logs b on a.id = b.id+1 inner join logs c on a.id = c.id+2 where a.num = b.num and a.num = c.num 너무 하드 코딩인 것 같다.. 처음에 join 조건을 between 으로 주려다가 num만 값을 빼오는 방법을 모르겠어서 에라 모르겠다 하고 했는데 통과해서 어안이 벙벙함 Lead select distinct sub.num as ConsecutiveNums from ( select id , num , lead(num, 1) over (or..