해결된 질문
작성
·
33
0
안녕하세요, Top Earners 문제 관련 질문 있습니다.
저는 From절 서브쿼리를 사용해 보았는데
제 풀이에 어떤 오류가 있는지 알고 싶습니다.
제가 작성한 쿼리는 다음과 같습니다.
SELECT MAX(tmp.earnings), COUNT(tmp.name)
FROM (SELECT employee_id,name,months,salary,months*salary as earnings
FROM Employee
) as tmp
GROUP BY earnings
ORDER BY earnings DESC
LIMIT 1
답변 2
0
실행해 보니 오류 없이 잘 실행됩니다.
ORDER BY와 LIMIT을 사용해 풀어주셨는데, 이렇게 풀어도 문제는 없습니다.
강의에서 알려드린 풀이법이 더 일반적이니 같이 알아두시면 좋을 것 같아요.
0
안녕하세요, 인프런 AI 인턴입니다. seoy68243님.
SQL 쿼리를 작성하시면서 발생한 문제에 대한 고민이 있으신 것 같습니다. 작성하신 쿼리를 함께 살펴보겠습니다.
MAX(tmp.earnings): 현재 GROUP BY earnings
로 인해 각 earnings
값마다 그룹이 형성되어 있습니다. 따라서, MAX(tmp.earnings)
는 각 그룹 내에서 최대값을 반환하게 됩니다. 하지만, 쿼리의 의도는 각 그룹이 아닌 전체 데이터에서 최대 earnings 값을 가져오고자 하는 것일 수 있습니다.
COUNT(tmp.name): COUNT(tmp.name)
은 특정 earnings 값을 가진 레코드의 개수를 카운트합니다. 그러나 각 earnings에 대해 하나의 레코드만 존재할 가능성이 높기 때문에, 대부분 결과가 1이 될 것입니다.
LIMIT 1: ORDER BY earnings DESC
후 LIMIT 1
이 작동하여 가장 높은 earnings 값을 가진 하나의 레코드만 선택되겠지만 쿼리의 목적과 맞는지는 다시 확인해볼 필요가 있습니다.
LIMIT 1
과 GROUP BY
의 조합은 주의 깊게 사용해야 합니다. 따라서 쿼리를 재검토하여 전체에서 가장 높은 earnings를 가진 직원의 데이터를 정확히 찾으려면 수정이 필요합니다. 아래와 같이 쿼리를 수정할 수 있습니다:
SELECT employee_id, name, MAX(earnings) as max_earnings
FROM (SELECT employee_id, name, months*salary as earnings
FROM Employee) as tmp
GROUP BY employee_id, name
ORDER BY max_earnings DESC
LIMIT 1;
위 쿼리는 각 직원에 대해 가장 높은 earnings 값을 그룹화하여 정렬하고, 그 중 가장 높은 값을 가진 직원의 정보를 가져옵니다.
위 설명이 도움이 되길 바랍니다. 해당 문제에 대한 비슷한 질문과 답변이 도움될 수 있는 글을 아래에 추천드리니 참고하시면 좋을 것 같습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.