노아

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

알고리즘/SQL

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

Noaahhh 2024. 9. 20. 23:01

 

Question

 

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

 

 

Pseudocode

 

 

  1. 서브쿼리 a 생성:
    • ECOLI_DATA 테이블에서 모든 컬럼과 DIFFERENTIATION_DATE의 연도를 추출하여 서브쿼리 a를 생성합니다.
  2. 서브쿼리 b 생성:
    • ECOLI_DATA 테이블에서 DIFFERENTIATION_DATE의 연도별로 최대 SIZE_OF_COLONY를 찾고, 연도와 최대 크기를 포함하는 서브쿼리 b를 생성합니다.
    • 연도별로 그룹화합니다.
  3. 조인 수행:
    • 서브쿼리 a와 b를 연도(year)를 기준으로 조인합니다.
  4. 결과 선택:
    • 최종적으로 연도(YEAR), mx_size에서 SIZE_OF_COLONY를 뺀 값(YEAR_DEV), 그리고 id를 선택합니다.
  5. 정렬:
    • 결과를 연도와 YEAR_DEV 기준으로 오름차순 정렬합니다.

 

 

 

Code

 

select 
    year(DIFFERENTIATION_DATE) YEAR,
    (b.mx_size - SIZE_OF_COLONY) YEAR_DEV,
    id
from (
    select *, year(DIFFERENTIATION_DATE) year
    from ECOLI_DATA) a
join  
(select 
    year(DIFFERENTIATION_DATE) year, 
    max(SIZE_OF_COLONY) mx_size
from ECOLI_DATA
group by year) b
on  a.year = b.year
order by 1, 2