inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

4번 문제 풀이

SET_문제 4번_TOP Competitors 관련 문의 드립니다.

249

붉은은짱

작성한 질문수 1

1

안녕하세요. 좋은 강의에 감사 드립니다.

저 같은 경우, 4번 문제를 다음과 같이 해결을 하고자 하였으나 정상적으로 진행되지 않았습니다.

SELECT H.hacker_id, H.name

FROM Submissions AS S

     INNER JOIN Challenges AS C ON S.challenge_id = C.challenge_id

     INNER JOIN Difficulty AS D ON C.difficulty_level = D.difficulty_level

     INNER JOIN Hackers AS H ON H.hacker_id = S.hacker_id

GROUP BY H.hacker_id, H.name

HAVING S.score = D.score AND COUNT(S.submission_id) > 1

ORDER BY COUNT(S.submission_id) DESC, H.hacker_id ASC

 

문제 풀이를 보면 "S.score = D.score" 를 GROUP BY 전에 진행하는데요.

그룹핑을 하고 조건을 주면 안되는 이유가 잘 이해되지 않습니다. 설명 부탁 드릴 수 있을지요?

sql

답변 1

4

이보민

안녕하세요 붉은은짱님

HAVING의 경우 GROUP BY를 진행한 후 실행되는 구문이기 때문에 GROUP BY로 그룹핑이 된 결과값에 대해서만 조건을 걸어줄 수 있습니다.

위 예시에서는 이미 GROUP BY에서 H.hacker_id와 H.name으로 그룹이 구성된 상태이기 때문에 S.score, D.score라는 개별 데이터에 대해서는 확인이 불가능 한데요.

이해가 어려우실 수도 있을 것 같아 조금 추상적인 예시를 들어 설명드려보겠습니다.

예를 들어, 올림픽에 개인전으로 출전한 선수들끼리는 개인 기록을 비교하여 확인할 수 있지만, 단체적에 출전한 선수들끼리는 개인 기록을 비교하지 않고 팀 기록을 서로 비교하여 우위를 정하는 것과 비슷하다고 생각해주시면 될 것 같습니다.

단체전에서는 팀으로 이미 선수들이 묶여있기 때문에, '팀 이름을 가나다 순으로 비교'하거나, '팀원들의 기록 평균이 A팀과 B팀에서 어떻게 차이가 나는지'는 확인 할 수 있지만, A팀의 1번 선수의 기록과 B팀의 5번 선수의 기록을 1:1로 비교하지는 않는 것(또는 규정상 그렇게 할 수 없는 것)이죠.

정리하자면 개별 데이터들을 비교하고 싶으면 WHERE문에서 조건을 사용하고, 그룹별로 묶인 상태에서 무언가를 비교하고 싶으면 HAVING을 사용하시면 됩니다.

도움이 되셨길 바랍니다.

감사합니다.

섹션 4번에 2번 문제 질문입니다.

0

107

2

4번 문제

0

91

1

Top competitors 에서 having count(h.hacker_id)로 해도 되나요?

0

266

1

leetcode 620 group by 질문이요

0

209

2

강의 일시정지/ 기간연장 검토 요청

0

386

1

4번 문제 group by 질문

0

325

2

세트2 4번 문제풀이 해설에 관한 질문

0

359

2

Weather Observation Station 11_ not like 사용

0

270

1

Placements에서 LEFT JOIN 뒤에 ON 조건

0

289

1

Set2 4번문제 질문 - New Companies

0

318

1

WHERE절 안 쓰고 HAVING COUNT(D.score = S.score) > 1 쓰면 왜 안되나요?

-1

714

1

as 2 space-separated values. 무슨 말인가요???

0

434

1

Weather observation Station 11 관련 질문

1

378

2

4번문제풀이

0

458

1

섹션3. Weather Observation Station 18 문제 관련

0

378

2

섹션 2에 1,2번 문제풀이 관하여

0

435

1

기한연장문의

0

332

1

Weather observation station 11 문제 not like

-1

371

1

inner join 과 left join

1

600

1

4번 BST 문제 틀리는 이유

0

347

1

4번 문제 질문

0

291

1

620. Not Boring Movies 문제 질문드립니다

0

290

1

binary tree 질문 입니다.

0

301

1

Top Competitors 질문있습니다 ㅠㅠ

0

248

1