ROW_NUMBER() , CASE WHEN 활용

dorongpark·2024년 6월 10일
0

해커랭크(sql)

목록 보기
6/20

테이블 소개

:해당 테이블을 아래와 같이 배열하기
(직업별 의사 , 교수, 가수, 배우 순으로 배열하되, 해당되는 셀 값이 없으면 NULL 처리, 이름은 알파벳 순서대로 정렬)


row_number() 함수

용도: 쿼리 각 행의 고유한 번호를 부여하기 위해 사용

기본 문법: row_number() over (partition by 그룹화 할 컬럼 order by 순서메길 컬럼)

  • 필수 사항: order by
  • 선택 사항: partition by - 특정 열을 기준으로 그룹화 하여, 각 그룹내에서 독립적으로 윈도우 함수 작동
  • 예시:

SELECT
name,
department,
salary,
ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS row_num
FROM employees;

결과값


  1. 첫번째 생각
    "한 줄(행)에 알파벳 순서대로 데이터를 배열하자" ==> ROW NUMBER로 순위 메기기

SELECT
NAME,
OCCUPATION,
ROW_NUMBER(PARTION BY OCCUPATION ORDER BY NAME) AS "ROW_NUMBER"
FROM OCCUPATIONS

  1. 두번째 생각
    "ROW_NUMBER 숫자를 중심으로 그룹핑 하기 + 직업별로 컬럼 만들기"

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
ORDER BY ROW_NUM
ORDER BY ROW_NUM

  1. 합치기

SELECT
MAX(CASE WHEN Occupation = 'Doctor' THEN Name ELSE NULL END) AS Doctor,
MAX(CASE WHEN Occupation = 'Professor' THEN Name ELSE NULL END) AS Professor,
MAX(CASE WHEN Occupation = 'Singer' THEN Name ELSE NULL END) AS Singer,
MAX(CASE WHEN Occupation = 'Actor' THEN Name ELSE NULL END) AS Actor -- 그룹핑 하기 위한 MAX 사용
FROM (
SELECT Name, Occupation,
ROW_NUMBER() OVER (PARTITION BY Occupation ORDER BY Name) AS RowNum
FROM OCCUPATIONS
) AS OrderedNames
GROUP BY RowNum
ORDER BY RowNum;

profile
야 너도 분석 할수 있어

0개의 댓글