인프런 커뮤니티 질문&답변

ljsuu96331님의 프로필 이미지
ljsuu96331

작성한 질문수

[백문이불여일타] 데이터 분석을 위한 중급 SQL

해커랭크 Top Earners 문제 질문

작성

·

220

·

수정됨

1

해커랭크 Top Earners 문제 질문입니다!

 

강의에서 풀어주신 코드인데요.

SELECT salary * months AS earnings, COUNT(*)

FROM Employee

GROUP BY earnings

ORDER BY earnings DESC

LIMIT 1;

 

이 코드가 안되는 이유가 궁금합니다!

SELECT MAX(salary * months AS earnings), COUNT(*)

FROM Employee

GROUP BY earnings;

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. ljsuu96331님, 질문 주셔서 감사합니다.

SQL 문제를 해결하는 과정에서 발생한 문제에 대해 궁금증을 해소해 드리겠습니다.

GROUP BY 절은 데이터를 특정 기준으로 그룹화할 때 사용되며, 각 그룹에 대한 집계함수의 결과가 출력됩니다. 그룹화를 할 때 GROUP BY 절에 사용하는 열이나 표현식은 SELECT 목록에있는 것이어야 합니다.

질문하신 코드의 두 번째 쿼리에서 MAXCOUNT는 집계함수를 사용하는데, 여기서 GROUP BY earnings는 의도하신 것과 다른 방식으로 사용되고 있습니다. earnings라는 별칭은 선택한 결과집합의 일부로서 제공되어야 하지만, 여기에서는 GROUP BY 절에 있어서 문제가 발생합니다.

해당 쿼리는 COUNT(*)로 각 그룹에 속하는 행의 수를 구하려고 시도하고 있는데, earnings에 대해서 그룹화를 하게 되면 결과가 예상과 다를 수 있습니다. 또한, MAX 함수는 해당 그룹 전체에서 가장 큰 값을 찾는 것이 목적이라 GROUP BY 절 없이 독립적으로 사용되어야 합니다.

그래서 아래와 같은 쿼리가 올바른 접근 방식일 수 있습니다.

SELECT MAX(salary * months) AS max_earnings, COUNT(*)
FROM Employee;

이 쿼리는 MAX 집계함수를 사용하여 모든 Employee 테이블의 행에 대해 salary * months의 최대값을 계산하고, COUNT(*)를 통해 총 행의 수를 구합니다. 이렇게 하면 가장 높은 수입(earnings)과 해당 수입을 가진 직원의 수를 구할 수 있습니다. GROUP BY를 사용하지 않아도 원하는 결과를 얻을 수 있습니다.

기타 문의사항이 있으시면 언제든지 질문해주세요.

ljsuu96331님의 프로필 이미지
ljsuu96331

작성한 질문수

질문하기