본문 바로가기

서브쿼리6

HackerRank - SQL Project Planning (서브쿼리, 윈도우함수)_MySQL 안녕하세요! 해커랭크의 SQL Project Planning 문제입니다. - 문제 설명 각 프로젝트 별로 시작일, 종료일이 포함된 테이블이 있다. 시작일과 종료일은 각 행마다 1일 차이로 구성되어 있다. 종료일과 시작일이 연속된다면 해당 프로젝트는 동일한 프로젝트의 부분이다. 프로젝트의 시작일과 종료일을 출력해야 하며, 프로젝트가 완료되기까지 소요되는 기간을 기준으로 오름차순 정렬한다. 기간이 동일하다면 시작일 기준으로 정렬한다. - 테이블 - 쿼리 SELECT s.start_date , e.end_date FROM ( SELECT start_date , ROW_NUMBER() OVER(ORDER BY start_date) rn FROM projects WHERE start_date NOT IN (SEL.. 2022. 5. 1.
HackerRank - Contest Leaderboard(조인, 서브쿼리)_MySQL 안녕하세요! 해커랭크의 Contest Leaderboard 문제입니다. - 문제 총 점수는 참가자 별로 각 도전에서 얻은 최고 점수를 합산한 것이다. hacker_id, name, total score 를 조회하고 total score를 기준으로 내림차순 정렬한다. 만약 두 명 이상의 참가자가 동점일 경우 hacker_id를 기준으로 오름차순 정렬한다. 총 점수가 0인 참가자는 제외한다. - 테이블 - 쿼리 1. 조인과 서브쿼리 사용 select h.hacker_id, name, sum(max_score) total_score from hackers h inner join (select hacker_id, challenge_id, max(score) max_score from submissions whe.. 2022. 4. 21.
HackerRank - Placements(조인, 서브쿼리/with 문)_MySQL 안녕하세요! 해커랭크에 있는 Placements 문제입니다. - 문제 자신보다 급여가 많은 친구가 있는 사람의 이름을 조회해야 한다. 이름은 친구의 급여를 기준으로 오름차순으로 정렬하면 되겠습니다. (친구와 비교를 해야 한다니 문제가 잔인하네요.) - 테이블 - 쿼리 1. 조인, 서브쿼리 사용 select name from students s inner join packages p on s.id = p.id inner join (select f.id, friend_id, salary from friends f inner join packages p on f.friend_id = p.id) f on s.id = f.id where p.salary < f.salary order by f.salary 1) 본.. 2022. 4. 21.
LeetCode - 184.Department Highest Salary (조인, 서브쿼리)_MySQL 안녕하세요! 각 부서에서 수입이 가장 높은 직원을 찾아내는 문제입니다. 위 이미지의 Output과 같이 결과를 출력해야 합니다. 서브쿼리와 이너조인을 활용한 풀이입니다. 1. 부서 별로 가장 높은 수입을 찾는다. (첫번째 INNER JOIN 의 서브쿼리) 2. 1에서 찾은 부서와 수입이 같은 직원을 찾아서 employee 테이블과 INNER JOIN 한다. JOIN 기준은 departmentid 와 salary (INNER JOIN : 조인하려는 테이블 사이에 동일한 데이터가 있는 부분만 출력된다.) 3. 부서 이름을 출력하기 위해 department 테이블과 INNER JOIN 한다. select d.name Department, e.name Employee, e.salary Salary from em.. 2022. 4. 8.
HackerRank - Top Earners (서브쿼리 / GROUP BY 외)_MySQL 안녕하세요! Employee 테이블에 있는 employee_id, name, months, salary 컬럼을 통해 수입이 가장 높은 직원이 몇 명인지 알아보는 문제입니다. 3가지 방법으로 결과를 출력해봤습니다. 1) where 절 서브쿼리 where 절에는 select 절의 alias를 사용하지 못하기 때문에 컬럼명을 그대로 사용했습니다. count 에는 * 를 사용해도 결과는 같습니다. select months * salary total_earning, count(employee_id) from employee where months * salary >= (select max(months * salary) from employee) group by 1 2) having 절 서브쿼리 having절은 s.. 2022. 4. 8.