문제
"이름" || "직업"으로 구성된 테이블에서
1열: 직업이 Doctor인 사람 이름 (오름차순 정렬)
2열: 직업이 Professor인 사람 이름 (오름차순 정렬)
3열: 직업이 Singer인 사람 이름 (오름차순 정렬)
4열: 직업이 Actor인 사람 이름 (오름차순 정렬)
직업 별 이름의 최대 개수 이하인 열에서 빈 셀은 Null로 출력
Sample Output
Jenny Ashley Meera Jane
Samantha Christeen Priya Julia
NULL Ketty NULL Maria
풀이
1. 직업 별 이름들을 서브쿼리로 추출해서 JOIN
- row_number() over(ORDER BY Name) 열 추가: 이름 오름차순 정렬 + JOIN 기준으로 하여, 빈 셀에 Null 삽입
- JOIN 방향은 이름 개수가 가장 많은 Professor 열 기준: 다른 열 기준 시 Professor의 이름이 잘리기 때문
SELECT d.Name, p.Name, s.Name, a.Name
FROM
(SELECT Name, row_number() over(ORDER BY Name) as r
FROM OCCUPATIONS
WHERE Occupation = 'Doctor') AS d
RIGHT JOIN
(SELECT Name, row_number() over(ORDER BY Name) as r
FROM OCCUPATIONS
WHERE Occupation = 'Professor') AS p
ON d.r = p.r
LEFT JOIN
(SELECT Name, row_number() over(ORDER BY Name) as r
FROM OCCUPATIONS
WHERE Occupation = 'Singer') AS s
ON p.r = s.r
LEFT JOIN
(SELECT Name, row_number() over(ORDER BY Name) as r
FROM OCCUPATIONS
WHERE Occupation = 'Actor') AS a
ON s.r = a.r
-- 출력
Aamina Ashley Christeen Eve
Julia Belvet Jane Jennifer
Priya Britney Jenny Ketty
NULL Maria Kristeen Samantha
NULL Meera NULL NULL
NULL Naomi NULL NULL
NULL Priyanka NULL NULL
'SQL' 카테고리의 다른 글
[HackerRank] Weather Observation Station 18(MySQL) (0) | 2024.05.18 |
---|---|
[HackerRank] New Companies(MySQL) (0) | 2024.05.11 |
[HackerRank] Occupations(MySQL) (0) | 2024.04.08 |
[HackerRank] The PADS(MySQL) (0) | 2024.03.20 |