코딩테스트 연습 - 연도별 대장균 크기의 편차 구하기 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
스칼라 서브쿼리는 메인 쿼리가 실행되고 한 행에 대해 스칼라 서브쿼리가 실행되기 때문에, 메인 쿼리에서 조회하는 행이 많으면 성능이 현저히 떨어지게 된다.
SELECT YEAR(D.DIFFERENTIATION_DATE) AS YEAR, (SELECT MAX(E.SIZE_OF_COLONY) FROM ECOLI_DATA AS E WHERE YEAR(E.DIFFERENTIATION_DATE) = YEAR(D.DIFFERENTIATION_DATE))-D.SIZE_OF_COLONY AS YEAR_DEV, D.ID
FROM ECOLI_DATA AS D
ORDER BY YEAR, YEAR_DEV
따라서 LEFT OUTER JOIN에 인라인 뷰를 통해 성능 저하를 해결할 수 있다.
이는 서브쿼리를 한 번만 실행시키는 효과가 있기 때문이다.
SELECT YEAR(D.DIFFERENTIATION_DATE) AS YEAR, F.MV-D.SIZE_OF_COLONY AS YEAR_DEV, D.ID
FROM ECOLI_DATA AS D LEFT OUTER JOIN (
SELECT YEAR(E.DIFFERENTIATION_DATE) AS YEAR, MAX(E.SIZE_OF_COLONY) AS MV
FROM ECOLI_DATA AS E
GROUP BY YEAR(E.DIFFERENTIATION_DATE)
) AS F
ON YEAR(D.DIFFERENTIATION_DATE) = F.YEAR
ORDER BY YEAR, YEAR_DEV
'코딩테스트 > MySQL' 카테고리의 다른 글
[프로그래머스 Level 3] 오랜 기간 보호한 동물(MySQL) .Feat GROUP BY (0) | 2024.07.12 |
---|---|
[프로그래머스 Level 3] 오랜 기간 보호한 동물(MySQL) .Feat LEFT OUTER JOIN (0) | 2024.06.29 |
[프로그래머스 Level 2] 분기별 분화된 대장균의 개체 수 구하기(MySQL) .Feat 문자열 합치기 (0) | 2024.06.26 |
[프로그래머스 Level 2] 조건에 부합하는 중고거래 상태 조회하기(MySQL) (0) | 2024.06.24 |
[프로그래머스 Level 2] 물고기 종류 별 잡은 수 구하기(MySQL) (0) | 2024.06.24 |