inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

GROUP BY 해커랭크 문제풀이

안녕하세요. Top Earners 문제 관련하여 질문 드립니다(GROUP BY, HAVING).

264

blackwaterstone

작성한 질문수 15

1

강사님 안녕하세요.

Top Earners(GROUP BY, HAVING) 문제 관련하여 질문드립니다.

제 생각에는 아래와 같은 쿼리로 답을 도출할 수 있을 것 같은데 의도한 대로 실행되지 않아서 질문드립니다.

SELECT months * salary as earnings

, count(*)

FROM employee

GROUP BY earnings

HAVING earnings = MAX(earnings);

  1. earnings를 산출

  2. earnings를 기준으로 그룹핑

  3. earnings의 값이 최대값인 데이터만 조회

이런 생각으로 쿼리를 작성하였습니다.

그런데 최대 earnings에 해당하는 데이터만 조회되는 것이 아니라, 모든 earnings 별 데이터가 다 조회되는 것으로 나타났습니다.

어떤 이유에서 이렇게 동작한 것인지 질문드립니다.

강의 덕분에 mysql 잘 배우고 있습니다. 감사합니다.

sql

답변 1

3

지식공유자 J

생각하신 로직에는 문제가 없으나, 이대로 작동하기 위해서는 HAVING 절에 수정이 필요합니다.

HAVING 절에서의 연산은 GROUP BY 에서 묶은 그룹별로 수행됩니다.
GROUP BY earnings
HAVING earnings = MAX(earnings)

이렇게 썼을 경우 MAX(earnings)는 earnings가 같은 데이터끼리 묶은 각 그룹 안에서 earnings의 최대값을 의미합니다.
그런데 earnings가 1000인 데이터끼리만 모인 그룹에서 최대값을 구하든 최소값을 구하든 1000이겠죠.
결국 HAVING 절의 의미가 1000 = 1000 인 경우를 구하라는 뜻, 즉 모든 데이터를 구하라는 뜻이 되어 모든 데이터가 조회되는 것입니다.

그룹별 MAX 값이 아니라 employee 테이블 전체에서의 MAX 값과 같은 데이터만 조회하고 싶은 것이므로
HAVING earnings = (SELECT MAX(months * salary) FROM employee)
이렇게 수정해 주셔야 합니다.
서브쿼리(쿼리 안의 다른 쿼리)를 이용한 방법인데, 저희 커리큘럼에서는 서브쿼리를 고급반에서 다루고 있습니다.
중급반에서 공부하는 내용은 아니지만 더 알고 싶으시다면 MySQL 공식문서를 참고하시거나 구글링 해 보시길 권해 드려요!

0

blackwaterstone

답변 덕분에 의문점이 해결되었습니다. 감사합니다!

리트코드 1280. Students and Examinations

0

94

3

16강 LEFT JOIN 리트코드 (183. Customers Who Never Order) 관련 질문

0

103

2

African Cities 문제관련 질문

0

65

1

SQL 코딩테스트 질문

0

239

1

HACKER RANK에서 문제찾기

0

109

2

강의 자료 다운로드

0

101

2

Asian population 문제가 없어요

0

88

2

INNER JOIN 에서 A.키 쓸때 빨간 색 나오고 'dause'

0

77

2

별칭 관련해서 질문 있습니다.

0

88

2

rising temperature 문제 질문

0

108

2

해커랭크 TOP EARNERS 문제 질문

0

110

1

ON 뒤에 질문

0

106

2

INNER JOIN 질문. 강의와 결과값이 다릅니다.

0

211

3

END, 뒤에 * 붙이면 에러가 뜹니다

1

213

2

CustomerID가 중복되서 나타나요

0

242

3

별칭이 전체 테이블을 못 불러와요.

0

152

2

CASE WHEN 쿼리 오류 문의

1

342

3

CASE문제풀이 질문

0

133

1

Customers Who Never Order 풀다가 Alias관련 질문사항

0

141

1

Average Population 질문

0

143

1

Revising Aggregations - The Count Function 질문

0

110

1

Average Population of Each Continent 에대해서 질문

0

199

3

w3schools 에서 쿼리 작성 질문

0

167

1

INNER JOIN 할 때 NULL 값이 안보일 수도 있나요?

0

332

1