해당 섹션은 프로그래머스/리트코드/해커랭커 등 외부 사이트에서 SQL 오답 문제에 대한 오답을 적고, 어느 부분에서 막혔고, 무엇을 배웠는지에 대해 간략하게 기록 하기 위함임.
원인 분석에 집중하세요: 정답 코드를 이해하는 것보다 내가 왜 틀렸는지를 한두 줄이라도 직접 글로 써보는 과정이 가장 중요합니다. '실수했다'에서 그치지 않고 '왜 실수했는지'를 파고들어야 같은 실수를 반복하지 않습니다.
태그를 적극적으로 활용하세요: #JOIN, #서브쿼리, #날짜함수 와 같이 태그를 꾸준히 달아두면, 나중에 특정 개념이 약하다고 느낄 때 해당 태그가 달린 문제들만 모아서 복습할 수 있습니다.
주기적으로 다시 풀어보세요: 일주일 뒤, 한 달 뒤에 오답 노트를 보면서 코드를 보지 않고 다시 한번 풀어보세요. 완벽하게 풀 수 있다면 그 개념은 이제 당신의 것이 된 겁니다.
-- 여기에 내가 작성했던 틀린 코드를 그대로 붙여넣으세요.
# -- 코드를 작성해주세요
WITH MAIN AS (
SELECT
ID,
ROW_NUMBER() OVER (ORDER BY SIZE_OF_COLONY DESC),
(SELECT COUNT(ID) FROM ECOLI_DATA ),
ROW_NUMBER() OVER (ORDER BY SIZE_OF_COLONY DESC)/(SELECT COUNT(ID) FROM ECOLI_DATA ) AS RATIO
FROM
ECOLI_DATA
)
SELECT
ID,
CASE WHEN
1-RATIO <=0.24 THEN 'LOW'
WHEN
1-RATIO <=0.49 AND 1-RATIO >=0.25 THEN 'MEDIUM'
WHEN
1-RATIO <=0.74 AND 1-RATIO >=0.5 THEN 'HIGH'
WHEN
1-RATIO >=0.75 THEN 'CRITICAL'
END COLONY_NAME
FROM
MAIN
order by
1
🤔 오답 원인 분석
오류 메시지 또는 실패 원인: [예: '정수 나눗셈인 경우 SQL에서는 소숫점까지 표현 안되고 정수로 나오게 됨
EX) 5/25 = 0.2 (X), 0 .']
근본적인 실수: [예: '당연히 소숫점 계산이 될 줄 알았음.']
헷갈렸던 개념: [예: '순위 함수 삼형제가 늘 헷갈림.']
WITH COLONY_RANK AS (
SELECT
ID,
-- ROW_NUMBER()를 사용해 순위(RN)를 매깁니다.
ROW_NUMBER() OVER (ORDER BY SIZE_OF_COLONY DESC) AS RN,
-- 윈도우 함수로 전체 개수(TOTAL_COUNT)를 효율적으로 구합니다.
COUNT(*) OVER() AS TOTAL_COUNT
FROM
ECOLI_DATA
)
SELECT
ID,
CASE
-- RN에 1.0을 곱해 '정수 나눗셈' 문제를 해결합니다.
WHEN (RN * 1.0 / TOTAL_COUNT) <= 0.25 THEN 'CRITICAL'
WHEN (RN * 1.0 / TOTAL_COUNT) <= 0.50 THEN 'HIGH'
WHEN (RN * 1.0 / TOTAL_COUNT) <= 0.75 THEN 'MEDIUM'
ELSE 'LOW'
END AS COLONY_NAME
FROM
COLONY_RANK
ORDER BY
ID ASC;
주요 함수/문법: 윈도우 함수의 목적, 정수를 나눌 경우 소숫점 미반영 문제, 순위 함수
배운 점:
① 윈도우 함수 개념 복습
-- 누적 합 계산
SELECT
ORDER_DATE,
SUM(DAILY_SALES) OVER (ORDER BY ORDER_DATE) AS RUNNING_TOTAL
FROM
sales
SELECT
ID,
SALES,
RANK() OVER (ORDER BY SALES DESC) AS SALES_RANK -- 판매 내림차순 순위
FROM
sales
SELECT
sale_month,
sale_AMOUNT,
LAG(SALES_AMOUNT,1,0) OVER (ORDER BY SALES_MONTH) ---- 이전 달의 매출 가져오기
FROM
monthly_sales


② 정수를 정수로 나눌 경우