ror_coding

[Programmers] 연도별 대장균 크기의 편차 구하기 - 299310 본문

Coding Test/SQL

[Programmers] 연도별 대장균 크기의 편차 구하기 - 299310

ro_rdil_31 2024. 9. 30. 23:59
728x90

SELECT 절에 MAX() 함수를 사용하면 오류가 생기는 케이스이다.

FROM 절에 table 두 개를 쓰고 WHERE 절에서 묶어준다. 이때 FROM 에서 sub query 를 사용한다 !

(아직 어색한 코드 순서라 사용하기 어렵긴 하지만 연습하면 유용할 것 같다 !)

 

Question

 

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

 

 

Point

 

  1. JOIN ON을 쓰지 않고 FROM 에 table 두 개를 쓰고 WHERE 에서 묶음.
  2. SELECT 절에 MAX(SIZE_OF_COLONY) - A.SIZE_OF_COLONY 사용시 오류 발생.

 

Code (After)

 

SELECT YEAR(DIFFERENTIATION_DATE) AS YEAR, 
        MAX(SIZE_OF_COLONY) OVER(PARTITION BY YEAR(DIFFERENTIATION_DATE)) - SIZE_OF_COLONY AS YEAR_DEV, 
        ID
    FROM ECOLI_DATA
    ORDER BY 1, 2

 

Code (Before)

 

SELECT B.YEAR AS YEAR, 
        MAX_SIZE-A.SIZE_OF_COLONY AS YEAR_DEV, 
        ID
    FROM ECOLI_DATA A, ( SELECT YEAR(DIFFERENTIATION_DATE) AS YEAR, MAX(SIZE_OF_COLONY) AS MAX_SIZE
                            FROM ECOLI_DATA
                            GROUP BY YEAR ) B
    WHERE YEAR(A.DIFFERENTIATION_DATE) = B.YEAR
    ORDER BY 1, 2

 

now me

On my github

 

728x90