문제풀이/SQL

연도별 대장균 크기의 편차 구하기

monawa 2025. 6. 1.
728x90

1. 문제링크

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

 

프로그래머스

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

programmers.co.kr

 

2. 문제

분화된 연도(YEAR), 분화된 연도별 대장균 크기의 편차(YEAR_DEV), 대장균 개체의 ID(ID) 를 출력하는 SQL 문을 작성해주세요. 분화된 연도별 대장균 크기의 편차는 분화된 연도별 가장 큰 대장균의 크기 - 각 대장균의 크기로 구하며 결과는 연도에 대해 오름차순으로 정렬하고 같은 연도에 대해서는 대장균 크기의 편차에 대해 오름차순으로 정렬해주세요.

 

3. 풀이

연도별 군집데이터를 보기위해 서브쿼리가 필요하다 
이떄 

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

SELECT문에 사용하면 쿼리가 직관적으로 할수있다 -> 단 데이터가 많을수록 비효율적일것이다

 

SELECT YEAR(A.DIFFERENTIATION_DATE)  YEAR
    , ABS(A.SIZE_OF_COLONY - B.MAX_SIZE) YEAR_DEV
    , A.ID
FROM ECOLI_DATA A
LEFT JOIN (
    SELECT YEAR(A.DIFFERENTIATION_DATE)  YEAR
    , MAX(A.SIZE_OF_COLONY)  MAX_SIZE
    FROM ECOLI_DATA A
    GROUP BY YEAR(A.DIFFERENTIATION_DATE)) B
ON YEAR(A.DIFFERENTIATION_DATE) = B.YEAR
ORDER BY YEAR, YEAR_DEV

FROM에서 서브쿼리를 사용하면 추후 데이터가 많을떄 좀더 좋읈듯?!

 

이대 ABS는 절대값을 구하기위해 입력

728x90

댓글