본문 바로가기

SQL16

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.
HackerRank - The Report(CASE WHEN/조인, BETWEEN)_MySQL 안녕하세요! HackerRank에 있는 The Report 문제입니다. - 문제 설명 Students 테이블과 Grades 테이블이 주어져 있다. 이름, 등급, 점수를 출력하는 쿼리를 작성한다. 등급을 내림차 순으로 정렬하며, 8등급 아래의 학생은 이름을 Null 로 표시한다. 8~10등급 중 각 등급 내에 두 명 이상의 학생이 있을 땐 알파벳 순으로 정렬한다. 8등급 아래의 각 등급 내에 두 명 이상의 학생이 있을 땐 점수 순으로 정렬한다. - 테이블 - 쿼리 1. ON 조건에 부등호와 AND를 사용한 조인 SELECT CASE WHEN g.grade < 8 THEN null ELSE s.name END AS name , g.grade , s.marks FROM students s INNER JOIN .. 2022. 4. 18.
HackerRank - Top Competitors (조인)_MySQL 안녕하세요! - 문제 두 개 이상의 challenge에서 만점을 받은 hacker_id와 name을 찾는 쿼리를 작성한다. 결과는 만점을 얻은 challenge의 개수를 기준으로 내림차순 정렬하는데 두 명 이상일 경우에는 hacker_id를 기준으로 오름차순 정렬한다. - 테이블 - 풀이 SELECT H.hacker_id, H.name FROM Submissions S INNER JOIN Challenges C ON S.challenge_id = C.challenge_id INNER JOIN Difficulty D ON C.difficulty_level = D.difficulty_level INNER JOIN Hackers H ON S.hacker_id = H.hacker_id WHERE S.score .. 2022. 4. 11.
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.