문제
내가 작성한 오답
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