코딩테스트 연습 - 대장균의 크기에 따라 분류하기 2
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/301649
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
대장균들의 크기에 따라서 4가지 단계로 그룹을 매겨서 해당하는 단계를 출력하면된다.
문제 풀이
이문제를 풀려면 순위를 매기는 함수를 알아야 편해서 이번 기회에 공부했다.
NTILE
NTILE 함수는 숫자를 입력하면 해당 숫자만큼 단계를 나눠서 구분해준다.
예를 들어서 4를 입력하면 25%씩 나눠서 구분해준다.
SELECT ID,
CASE
WHEN NTILE(1) OVER (order by SIZE_OF_COLONY) = 1 THEN 'A'
WHEN NTILE(2) OVER (order by SIZE_OF_COLONY) = 2 THEN 'B'
WHEN NTILE(3) OVER (order by SIZE_OF_COLONY) = 3 THEN 'C'
WHEN NTILE(4) OVER (order by SIZE_OF_COLONY) = 4 THEN 'D'
END as RK
FROM TABLE
ORDER BY ID ASC;
0~25% 까지는 A
26~50% 까지는 B
51~75% 까지는 C
76~100% 까지는 D
( 오름차순, 내림차순을 잘 체크해야한다. )
RANK
RANK 함수는 순위를 전부 매겨준다.
SELECT ID, RANK() OVER (order by SIZE_OF_COLONY) AS RK
FROM TABLE
ORDER BY ID ASC;
ID | RANK |
1 | 6 |
2 | 4 |
3 | 4 |
4 | 2 |
5 | 2 |
6 | 1 |
DENSE_RANK
RANK와는 다르게 공동순위를 넘지않는다.
SELECT ID, DENSE_RANK() OVER (order by SIZE_OF_COLONY) AS RK
FROM ECOLI_DATA
ORDER BY ID ASC;
ID | RANK |
1 | 4 |
2 | 3 |
3 | 3 |
4 | 2 |
5 | 2 |
6 | 1 |
ROW_NUMBER
공동순위 자체를 무시한다.
SELECT ID, ROW_NUMBER() OVER (order by SIZE_OF_COLONY) AS RK
FROM ECOLI_DATA
ORDER BY ID ASC;
ID | RANK |
1 | 6 |
2 | 4 |
3 | 5 |
4 | 2 |
5 | 3 |
6 | 1 |
구현
SELECT ID,
CASE
WHEN NTILE(4) OVER (order by SIZE_OF_COLONY) = 1 THEN 'LOW'
WHEN NTILE(4) OVER (order by SIZE_OF_COLONY) = 2 THEN 'MEDIUM'
WHEN NTILE(4) OVER (order by SIZE_OF_COLONY) = 3 THEN 'HIGH'
ELSE 'CRITICAL'
END as COLONY_NAME
FROM ECOLI_DATA
ORDER BY ID ASC;
'공부 일지 > 문제풀이' 카테고리의 다른 글
[프로그래머스] 연도별 대장균 크기의 편차 구하기 (MySQL) (0) | 2024.11.26 |
---|---|
[프로그래머스] 분기별 분화된 대장균의 개체 수 구하기 (MySQL) (0) | 2024.11.25 |
[프로그래머스] 자동차 대여 기록 별 대여 금액 구하기 (MySQL) (0) | 2024.11.24 |
[프로그래머스] 없어진 기록 찾기 (MySQL) (0) | 2023.12.04 |
[프로그래머스] 오프라인/온라인 판매 데이터 통합하기 (MySQL) (1) | 2023.11.22 |