[TIL] 23.04.12

문종현·2023년 4월 12일
0

TIL

목록 보기
104/119
post-custom-banner

👉 오늘 한 일

  • 책 집필 - 편집 툴 적용
  • 해커랭크 SQL

해커랭크 SQL

1. Occupations 📌

생각한 풀이

  • 여기까지 생각해봤으나 더 이상의 진전되는 풀이가 없어서 풀이를 보고 다음에 다시 풀어보기로 함
SELECT 
    CASE WHEN occupation = "Doctor" THEN name ELSE NULL END,
    CASE WHEN occupation = "Professor" THEN name ELSE NULL END,
    CASE WHEN occupation = "Singer" THEN name ELSE NULL END,
    CASE WHEN occupation = "Actor" THEN name ELSE NULL END
FROM occupations

다른 사람 풀이

핵심 코드

  • window function을 사용함. 이렇게 하면 직업별로 파티션이 생기고 같은 직업 내에서 이름 알파벳 순으로 번호가 매겨짐. 이 임시 테이블을 서브쿼리로 활용
SELECT occupation, name, ROW_NUMBER() OVER (PARTITION BY occupation ORDER BY name)
FROM occupations

최종 코드

  • 이름 알파벳 순서로 출력하기 위해 row_number 컬럼을 이용함. GROUP BY rn은 같은 rn 즉, rn이 1인 것끼리 묶어서 출력하고, 2인 것끼리 묶어서 출력하고...를 수행한다.
SELECT 
    MIN(CASE WHEN occupation = "Doctor" THEN name ELSE NULL END),
    MIN(CASE WHEN occupation = "Professor" THEN name ELSE NULL END),
    MIN(CASE WHEN occupation = "Singer" THEN name ELSE NULL END),
    MIN(CASE WHEN occupation = "Actor" THEN name ELSE NULL END)
FROM (
    SELECT occupation, name, ROW_NUMBER() OVER (PARTITION BY occupation ORDER BY name) rn
    FROM occupations) tmp
GROUP BY rn
profile
자라나라 새싹새싹🌱
post-custom-banner

0개의 댓글