문제

"이름" || "직업"으로 구성된 테이블에서

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

+ Recent posts