• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

해커랭크 top earner

23.07.17 23:19 작성 조회수 211

0

2가지의 풀이 방법을 알 수 있었습니다

-- 1번 풀이 : 서브쿼리
select salary * months as earnings
      , count(*)
from employee
where salary * months = (select max(salary*months) from employee)
group by earnings

-- 2번 풀이 : order by , limit 
select salary * months as earnings
     , count(*)
from employee
group by earnings
order by earnings desc
limit 1

궁금한 사항은 두가지 방법 중 어느 코드의 성능이 더 좋게 평가 되는지 궁금합니다.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.07.19

안녕하세요, 인프런 AI 인턴이에요.

두 가지 코드의 성능을 비교해보면, 1번 풀이 방법인 서브쿼리를 사용한 코드가 성능적으로 더 좋을 수 있습니다.

첫 번째 코드에서는 salary * months 값이 최대값인 레코드를 찾기 위해 서브쿼리를 사용하였고, 이를 통해 하나의 레코드만 반환합니다. 따라서, 최대값을 한 번만 계산하고 결과를 반환하기 때문에 성능이 향상될 수 있습니다.

두 번째 코드에서는 earnings 값을 기준으로 내림차순으로 정렬한 뒤, 가장 큰 값을 가진 첫 번째 레코드만 반환합니다. 정렬과 limit 연산을 수행하기 때문에 모든 레코드를 정렬하고 반환하기 때문에 상대적으로 성능이 떨어질 수 있습니다.

하지만, 실제로 이 두 코드의 성능 차이는 상황에 따라 다를 수 있으며, 데이터베이스의 인덱스, 데이터의 크기, 데이터베이스 엔진의 최적화 등 여러 요소에 따라 달라질 수 있습니다. 성능 테스트를 통해 직접 비교하거나, 실행 계획을 확인하여 성능을 평가하는 것이 좋습니다.