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
- JOIN ON을 쓰지 않고 FROM 에 table 두 개를 쓰고 WHERE 에서 묶음.
- 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