공부 일지/문제풀이

[프로그래머스] 연도별 대장균 크기의 편차 구하기 (MySQL)

Joshbla 2024. 11. 26. 23:29

코딩테스트 연습 - 연도별 대장균 크기의 편차 구하기

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/299310

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제 설명

다음과 같이 대장균의 정보가 주어진다. 

1. 연도별로 가장 SIZE_OF_COLONY가 큰 값을 구한다. =>MAX_SIZE라고 지칭

2. 각 대장균마다 해당되는 MAX_SIZE에서 자신의 SIZE_OF_COLONY를 빼서 YEAR_DEV라고 지칭한다.

3. YEAR_DEV 오름차순정렬, ID 오름차순 정렬

 


문제 풀이

생각 과정

우선 연도별 가장 큰 대장균의 크기부터 구했다.

-- 연도별 가장 큰 대장균의 크기
SELECT MAX(SIZE_OF_COLONY) FROM ECOLI_DATA
GROUP BY DATE_FORMAT("%Y",DIFFERENTIATION_DATE)

그리고 위의 구문을 서브쿼리로 사용하기로 했다.

 

구현

SELECT 
  YEAR(DIFFERENTIATION_DATE) AS YEAR, 
  (
    (
      SELECT 
        MAX(SIZE_OF_COLONY) 
      FROM 
        ECOLI_DATA 
      WHERE 
        YEAR = YEAR(DIFFERENTIATION_DATE) 
      GROUP BY 
        YEAR(DIFFERENTIATION_DATE)
    ) - SIZE_OF_COLONY
  ) AS YEAR_DEV, 
  ID 
FROM 
  ECOLI_DATA 
ORDER BY 
  YEAR ASC, 
  YEAR_DEV ASC;

 

주의점

처음엔 아래와 같이 제출했는데 계속 오답처리가 돼서 LEFT가 아니라 YEAR을 사용하니 통과가 됐다. 

정답을 확인할 때 타입도 확인하는 것 같다. (DATE_FORMAT도 오답처리가 된다.)

SELECT 
LEFT(DIFFERENTIATION_DATE,4) AS YEAR,... (오답)

SELECT 
YEAR(DIFFERENTIATION_DATE) AS YEAR,... (통과)