https://school.programmers.co.kr/learn/courses/30/lessons/301649
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr



문제를 읽고 처음 들었던 생각은 가장 긴 길이를 기준으로 4등분하면 되겠다고 생각하고 짰다.
하지만,, 출력결과를 보고 깨달았다. 길이는 기준이 되지 못하겠구나..!! => 2 2 2 2 12 12 12 12 가 있다면, 2들은 무조건 LOW로 출력된다,,
그래서 아래의 결과가 나왔다.
SELECT ID, (CASE
WHEN SIZE_OF_COLONY >= MAX_SIZE*0.75 THEN 'CRITICAL'
WHEN SIZE_OF_COLONY >= MAX_SIZE*0.5 THEN 'HIGH'
WHEN SIZE_OF_COLONY >= MAX_SIZE*0.25 THEN 'MEDIUM'
ELSE 'LOW' END) AS COLONY_NAME
FROM ECOLI_DATA, (SELECT MAX(SIZE_OF_COLONY) AS MAX_SIZE FROM ECOLI_DATA) AS MAX_SIZE_TABLE
ORDER BY 1;

그러면 전체 개수를 무조건 4등분하기 위해서 무슨 기준으로 나누어야 하지,,?
정답은 랭크를 먹여주는 순위함수에 있었다!!!!!
*** NTILE (순위함수)
: 지정된 수만큼 등급으로 나누어 각 등급번호 출력
SELECT ID, NTILE (나눌등급수) OVER (ORDER BY 등급나눌컬럼 DESC) AS '출력컬럼명'
FROM 테이블명;
이와 같은 형태로 구현하게 된다.
<제출코드>
-- 코드를 작성해주세요
-- 대장균 개체의 ID(ID) 와 분류된 이름(COLONY_NAME)을 출력
-- 개체의 ID 에 대해 오름차순
WITH COLONY_RANK AS (SELECT ID, NTILE(4) OVER (ORDER BY SIZE_OF_COLONY DESC) AS SIZE_RANK
FROM ECOLI_DATA)
SELECT ID, CASE WHEN SIZE_RANK = 1 THEN 'CRITICAL'
WHEN SIZE_RANK = 2 THEN 'HIGH'
WHEN SIZE_RANK = 3 THEN 'MEDIUM'
ELSE 'LOW' END AS COLONY_NAME
FROM COLONY_RANK
ORDER BY 1;
'코테 > 프로그래머스' 카테고리의 다른 글
99클럽 코테 스터디 21일차 TIL 완전탐색(카펫) (0) | 2024.11.17 |
---|---|
99클럽 코테 스터디 20일차 TIL 완전탐색(모의고사) (2) | 2024.11.16 |
99클럽 코테 스터디 7일차 TIL DFS(모음사전) (0) | 2024.11.03 |
[프로그래머스] 284531 노선별 평균 역 사이 거리 조회하기 (MySQL) (0) | 2024.11.03 |
99클럽 코테 스터디 3일차 TIL 이분탐색(입국심사) (0) | 2024.10.30 |