작성
·
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 목록에있는 것이어야 합니다.
질문하신 코드의 두 번째 쿼리에서 MAX
와 COUNT
는 집계함수를 사용하는데, 여기서 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
를 사용하지 않아도 원하는 결과를 얻을 수 있습니다.
기타 문의사항이 있으시면 언제든지 질문해주세요.