PromleeBlog
sitemapaboutMe

posting thumbnail
[PGM] 연도별 대장균 크기의 편차 구하기 (SQL)
[PGM] Get the deviation of E. coli size by year (SQL)

📅

🚀

알고리즘 분류🔗

LEFT JOIN, GROUP BY, ORDER BY

🚀

문제 설명🔗

IDPARENT_IDSIZE_OF_COLONYDIFFERENTIATION_DATEGENOTYPE
1NULL102019/01/015
2NULL22019/01/013
311002020/01/014
42102020/01/014
52172020/01/016
641012021/01/0122

🚀

풀이🔗

  1. 내부 서브쿼리부터 작성합니다.
    • ECOLI_DATA 테이블에서 연도별 최대 대장균 크기를 구합니다.
    • 연도별 최대 대장균 크기를 구하기 위해 YEAR(DIFFERENTIATION_DATE)로 연도를 추출하고, MAX(SIZE_OF_COLONY)로 최대 대장균 크기를 구합니다.
    • GROUP BY YEAR(DIFFERENTIATION_DATE)로 연도별로 그룹핑합니다.
  2. 외부 쿼리에서 연도별 대장균 크기의 편차를 구합니다.
    • ECOLI_DATA 테이블에서 YEAR(DIFFERENTIATION_DATE)로 연도를 추출하고, SIZE_OF_COLONY로 대장균 크기를 구합니다.
    • 내부 서브쿼리에서 구한 연도별 최대 대장균 크기를 외부 서브쿼리에서 사용하기 위해 JOIN으로 연결합니다.
    • YEAR(t1.DIFFERENTIATION_DATE) = t2.YEAR로 연도별로 매칭합니다.
    • MAX_COLONY - SIZE_OF_COLONY로 대장균 크기의 편차를 구합니다.
  3. ORDER BY YEAR, YEAR_DEV로 정렬합니다.

🚀

코드 - SQL🔗

SELECT YEAR(t1.DIFFERENTIATION_DATE) as YEAR, (t2.MAX_COLONY - t1.SIZE_OF_COLONY ) as YEAR_DEV, t1.ID
FROM ECOLI_DATA as t1
JOIN (
    SELECT YEAR(DIFFERENTIATION_DATE) as YEAR, MAX(SIZE_OF_COLONY) as MAX_COLONY
    FROM ECOLI_DATA
    GROUP BY YEAR(DIFFERENTIATION_DATE)
) t2 ON YEAR(t1.DIFFERENTIATION_DATE) = t2.YEAR
ORDER BY YEAR, YEAR_DEV

🚀

핵심🔗