[SQL문제풀기] 연도별 대장균 크기의 편차 구하기

silver's avatar
Dec 12, 2024
[SQL문제풀기] 연도별 대장균 크기의 편차 구하기
 

문제

 

내가 작성한 오답

SELECT L.YEAR, 최대-L.SIZE_OF_COLONY YEAR_DEV, L.ID FROM (SELECT DATE_FORMAT(DIFFERENTIATION_DATE,'%Y') YEAR, ID, SIZE_OF_COLONY FROM ECOLI_DATA) L JOIN (SELECT DATE_FORMAT(DIFFERENTIATION_DATE,'%Y') YEAR, MAX(SIZE_OF_COLONY) 최대 FROM ECOLI_DATA GROUP BY DATE_FORMAT(DIFFERENTIATION_DATE,'%Y')) R ON L.YEAR = R.YEAR ORDER BY L.YEAR ASC, YEAR_DEV ASC;
 

수정한 정답

SELECT CAST(L.YEAR AS UNSIGNED) AS YEAR, 최대-CAST(L.SIZE_OF_COLONY AS UNSIGNED) YEAR_DEV, L.ID FROM (SELECT DATE_FORMAT(DIFFERENTIATION_DATE,'%Y') YEAR, ID, SIZE_OF_COLONY FROM ECOLI_DATA) L JOIN (SELECT DATE_FORMAT(DIFFERENTIATION_DATE,'%Y') YEAR, MAX(SIZE_OF_COLONY) 최대 FROM ECOLI_DATA GROUP BY DATE_FORMAT(DIFFERENTIATION_DATE,'%Y')) R ON L.YEAR = R.YEAR ORDER BY CAST(L.YEAR AS UNSIGNED) ASC, YEAR_DEV ASC;
 
💡
DATE_FORMAT함수는 날짜를 문자열로 바꿔준다.
분화된 연도(YEAR), 분화된 연도별 대장균 크기의 편차(YEAR_DEV), 대장균 개체의 ID(ID) 를 출력하는 SQL 문을 작성해주세요. 분화된 연도별 대장균 크기의 편차는 분화된 연도별 가장 큰 대장균의 크기 - 각 대장균의 크기로 구하며 결과는 연도에 대해 오름차순으로 정렬하고 같은 연도에 대해서는 대장균 크기의 편차에 대해 오름차순으로 정렬해주세요.
 
→ 처음 작성 오답 작성시 출력된 결과값이 같으므로 문자열을 숫자열로 바꿔야한다는 생각을 하지 못했다. 분화된 연도와 연도별 대장균 크기의 편차를 정확하게 정렬하기 위해서는 문자와 문자를 비교하는게 아니라 숫자를 비교해야하므로 문자열을 숫자로 캐스팅해야했다.
 
💡
MYSQL에서 문자열을 숫자로 변환하는 방법 CAST(DATE_FORMAT(DIFFERENTIATION_DATE, '%Y') AS UNSIGNED) CONVERT(DATE_FORMAT(DIFFERENTIATION_DATE, '%Y'), UNSIGNED)
 
Share article

silver