728x90
반응형
분기별 분화된 대장균의 개체 수 구하기
수정 전
- 이전에 했던 것들 참고해가면서.. 써봤는데.. 연습에선 돌아갔는 데 문제를 제출하면 계속 안 된다.
WITH QUARTERS AS (
SELECT ID,
NTILE(4) OVER (ORDER BY DATE_FORMAT(DIFFERENTIATION_DATE, '%m')) AS QUARTER
FROM ECOLI_DATA
)
SELECT
CASE WHEN QUARTER = 1 THEN '1Q'
WHEN QUARTER = 2 THEN '2Q'
WHEN QUARTER = 3 THEN '3Q'
ELSE '4Q' END AS QUARTER,
COUNT(*) AS ECOLI_COUNT
FROM QUARTERS
GROUP BY QUARTER
ORDER BY QUARTER;
수정 후
- ntile()를 쓰면 원하는 숫자만큼 나눌 수는 있지만,
1. date_format은 문자형임. 정렬은 되지만 무자형으로 처리됨.
2. 리스트에 모든 달들이 들어있지 않으면, 4분기로 나눈다고 가정했을 때 엉뚱한 달이 분기에 배치 될 수 있음.
수정 1
- 문자형을 숫자형으로 형변환-> cast()
- 근데 실패함.. 이 방법 자체를 안 쓰는 게 나을 듯.
WITH QUARTERS AS (
SELECT ID,
NTILE(4) OVER (ORDER BY CAST(DATE_FORMAT(DIFFERENTIATION_DATE, '%m') AS UNSIGNED)) AS QUARTER -- 형변환 시도 but, 실패
FROM ECOLI_DATA
)
SELECT
CASE WHEN QUARTER = 1 THEN '1Q'
WHEN QUARTER = 2 THEN '2Q'
WHEN QUARTER = 3 THEN '3Q'
ELSE '4Q' END AS QUARTER,
COUNT(*) AS ECOLI_COUNT
FROM QUARTERS
GROUP BY QUARTER
ORDER BY QUARTER;
수정 후 3
- 직접 기준 정하기
- 굳이 date_format()안해도 month()로 가지고 올 수 있음.
SELECT
CASE WHEN MONTH(DIFFERENTIATION_DATE) BETWEEN 1 AND 3 THEN '1Q' -- 그냥 바로 계산
WHEN MONTH(DIFFERENTIATION_DATE) BETWEEN 4 AND 6 THEN '2Q' -- month()로 가지고 올 수 있음
WHEN MONTH(DIFFERENTIATION_DATE) BETWEEN 7 AND 9 THEN '3Q'
ELSE '4Q' END AS QUARTER,
COUNT(*) AS ECOLI_COUNT
FROM ECOLI_DATA
GROUP BY QUARTER
ORDER BY QUARTER;
728x90
반응형
'Data Science > SQL' 카테고리의 다른 글
[Elice SQL] 집합연산자 & 계층형 질의 (0) | 2025.03.02 |
---|---|
[Elice SQL] 다중행, 단일행 서브쿼리 (0) | 2025.03.01 |
[프로그래머스 sql] left join, count()는 null을 0으로 셈 (0) | 2025.02.25 |
[elice sql] sql 데이터 삽입/수정/삭제 (0) | 2025.02.25 |
[프로그래머스 sql] where ~ like는 문자열 타입 비교, date는 다르게 (0) | 2025.02.24 |