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

learn&learn님의 프로필 이미지

작성한 질문수

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

GROUP BY 해커랭크 문제풀이

ORDER BY & LIMIT 아닌 MAX 함수로도 출력이 가능한가요?

20.09.06 20:41 작성

·

873

2

SELECT MAX(salary * months), count(*)

From employee

GROUP BY salary * months

쿼리로 이렇게 짤 경우 가장 큰 값이 나오지 않고 

Earnings 별로 인원수가 나오더라구요

max함수와 ORDER BY & LIMIT 함수 차이가 뭔지 궁금합니다.

답변 2

5

이보민님의 프로필 이미지
이보민
지식공유자

2020. 09. 26. 14:29

안녕하세요 learn&learn님 답변이 늦어 죄송합니다.

질문 주신 내용을 보니 쿼리 내에 문법적인 오류와 논리적인 오류가 동시에 들어있어서 분리하여 설명드려야 할 것 같아요 :)

1. GROUP BY 문법 오류

GROUP BY는 인터프리터에게 특정 기준을 주고 그 기준으로 데이터를 분류해서 연산을 하게끔 명령하는 명령어라고 할 수 있겠는데요. 따라서 해당 구문을 사용하실 때에는 GROUP BY의 기준이 되는 값(salary*months)을 반드시 SELECT 문에 지정해주고 그것을 기준으로 연산을 진행하셔야만 합니다.

따라서 수강생분께서 짜주신 쿼리에서 GROUP BY를 올바르게 사용하시려면 아래와 같은 쿼리로 변경을 해주셔야 하는데요. 그렇게 되면 MAX를 사용하신 이유가 없어집니다.

SELECT salary*months, MAX(salary*months), count(*)
FROM employee
GROUP BY salary*months

2. ORDER BY, LIMIT와 MAX의 차이점

ORDER BY, LIMIT 와 MAX는 언뜻 보기에는 비슷해보이고, 조건에 따라 동일한 결과값을 낼 때도 있지만 엄연하게 따지면 전혀 다른 매커니즘으로 동작하는 쿼리입니다. ORDER BY 와 LIMIT는 row 단위로 데이터를 확인하면서 가져오는 쿼리라면 MAX는 하나의 컬럼 내에서 가장 큰 하나의 값을 찾아내는 쿼리입니다.

  • ex/ employee 테이블에서 emplyee_id의 값이 가장 큰 사람의 이름과 재직기간과 월급을 가져와라 -> order by, limit를 사용하여 확인 가능
  • ex2/ employee 테이블에서 가장 큰employee_id 값은 무엇인가? -> max 사용하여 확인가능, order by limit도 사용가능.

즉, 테이블 내 한개의 컬럼에 대한 최소값, 최댓값을 구해야 할 경우 max와 order by, limit 1은 호환이 될 수 있으나. 그 이외의 경우에는 다르게 동작하게 됩니다.

3. MAX를 이용한 풀이는?

max를 이용하여 해당 문제를 풀기 위해서는 기본 쿼리로는 불가능하여 서브쿼리 등을 이용해야 하는데요. 궁금하신 경우 아래 쿼리를 참고해보시고 궁금한 점이 있으시면 다시 질문을 주시면 좋을 것 같습니다.

select max(salary*months), count(employee_id) 
from employee 
where salary*months in (select max(salary*months) from employee);

다시 한번 답변이 늦어져서 정말 죄송합니다.

좋은 질문 주셔서 감사합니다 :)

0

learn&learn님의 프로필 이미지

2020. 09. 06. 20:42

해당 함수로 쿼리 돌렸을 때 나오는 데이터입니다.