강의

멘토링

로드맵

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

ljsuu96331님의 프로필 이미지
ljsuu96331

작성한 질문수

해커랭크 Top earners

작성

·

257

1

해커랭크 top earners 문제 질문입니다.

 

강의에서 풀어주신 코드입니다.

SELECT salary * months AS earnings, COUNT(* )

FROM Employee

GROUP BY earnings

ORDER BY earnings DESC

LIMIT 1;

108064 7

 

제가 따로 혼자 풀어보다가 몇가지 궁금한 점이 생겼는데요.

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

FROM Employee

GROUP BY (months * salary) AS earnings

ORDER BY (months * salary) AS earnings DESC

LIMIT 1 ;

  1. 이 코드는 왜 안되는 걸까요?

    LIMIT 다음에 COUNT(*) 코드가 실행되서 그런건가요?

  2. GROUP BY 명령어 바로 뒤에는 (months * salary) AS earnings 와 같은 계산식이 들어가면 안되나요?

 

 

 

3.

그리고 제가 이전에 이 문제 관련해서

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

FROM Employee

GROUP BY earnings; 는 왜 안되는지 질문을 한적이 있었습니다.

그런데 답변에서

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

FROM Employee

이렇게 코드를 바꾸면 실행될거라고 답변이 달렸는데요.

코드 복사해서 실행해보니 정답이 나오지 않습니다.

 

 

  1.  

SELECT salary * months AS earnings, COUNT(* )

FROM Employee

GROUP BY earnings

ORDER BY earnings DESC

LIMIT 1;

마지막으로 강사님께서 풀어주신 코드 중 SELECT salary * months AS earnings -> FROM -> GROUP BY -> ORDER BY -> LIMIT -> COUNT 순으로 명령어가 읽히는게 맞죠?

순서가 너무 헷갈리네요...

 

 

 

 

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

ljsuu96331님의 궁금증을 하나씩 해결해 보겠습니다.

  1. 첫번째 코드에서는 GROUP BYORDER BY 절에 AS 키워드를 사용하는 것이 잘못되었습니다. AS 키워드는 별칭(Alias)을 부여할 때 사용하는 것이며, GROUP BYORDER BY 절에는 직접 계산식을 사용하거나, 이미 정의된 별칭을 사용해야 합니다. 따라서 아래와 같이 수정할 수 있습니다.
SELECT (months * salary) AS earnings, COUNT(*) 
FROM Employee 
GROUP BY (months * salary) 
ORDER BY earnings DESC 
LIMIT 1;
  1. GROUP BY 절 바로 뒤에는 별칭을 새로 정의할 수 없습니다. 이미 SELECT 절에서 정의된 별칭을 사용하거나 직접 계산식을 넣어야 합니다.

  2. MAX 함수는 그룹의 최댓값을 반환하므로, GROUP BY와 함께 사용되어서는 안 됩니다. 대신, 결과를 필터링하기 위해 ORDER BYLIMIT를 사용하여 최댓값을 찾아야 합니다. 따라서 다음과 같이 코드를 수정할 수 있습니다.

SELECT salary * months AS earnings, COUNT(*) 
FROM Employee 
GROUP BY earnings 
ORDER BY earnings DESC 
LIMIT 1;

그리고 SQL 명령어가 실행되는 순서는 다음과 같습니다:

  • FROM 절에서 데이터를 가져옵니다.
  • GROUP BY 절로 데이터를 그룹화합니다.
  • SELECT 절로 데이터에 대한 처리(계산, 별칭 부여 등)를 수행합니다.
  • ORDER BY 절로 결과를 정렬합니다.
  • LIMIT 절로 결과의 범위를 제한합니다.
  • 만약 SELECT 절에 집계 함수(COUNT, SUM 등)가 사용된 경우, GROUP BY 절 이후에 해당 집계 함수에 의해 계산이 이루어집니다.

도움이 되셨기를 바랍니다. 더 궁금한 점이 있으시면 언제든지 문의해 주세요!

ljsuu96331님의 프로필 이미지
ljsuu96331

작성한 질문수

질문하기