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

최원빈님의 프로필 이미지
최원빈

작성한 질문수

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

2번 문제 풀이

WHERE 절에 서브쿼리를 만들어서 문제를 풀 수 있나요?

작성

·

206

0

안녕하세요! 강의 잘 듣고 있어요.

다름이 아니라 혹시 FROM절이 아닌 WHERE 절에 서브쿼리를 넣어서 문제를 풀 수 있는 방법이 있을까요? 

제가 아래와 같이 WHERE절에 서브쿼리를 넣었는데, 어떤 점이 잘못 되었는지 피드백 주시면 감사드릴게요.

 

SELECT H.hacker_id, H.name, SUM(S.score)

FROM Hackers H

     INNER JOIN Submissions S

     ON H.hacker_id = S.hacker_id

WHERE S.score = (

                SELECT H.hacker_id, S.challenge_id, MAX(S.score)

                FROM Submissions

                GROUP BY hacker_id, challenge_id

                ) AS A

GROUP BY H.hacker_id, H.name

HAVING SUM(S.score) > 0

ORDER BY SUM(S.score), H.hacker_id;

답변 1

0

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

WHERE 절에서 에러가 나는 것은 두 항 중 첫번째 것은 1개의 값(s.score)이고, 두 번째 것은 3개의 값(h.hacker_id, s.challenge_id, max(s.score))이라서 서로 비교가 불가능하기 때문입니다.
서브쿼리의 SELECT 절에 s.score 컬럼과 비교할 단 하나의 컬럼만 명시를 하셔야 합니다.

그럼 max(s.score)만 남겨야 하겠다는 생각을 하실 수도 있을 것 같은데요.
이 경우에는 동일한 hacker_id의 점수끼리 비교하도록 붙이는 과정이 빠지게 됩니다. 
서브쿼리는 서브쿼리 밖에서 일어나는 INNER JOIN 등과 관계 없이 단독으로 작동하기 때문입니다.

이 문제에서는 WHERE 절보다는 FROM 절에 서브쿼리를 사용하는 것이 훨씬 명확한 풀이인 듯 합니다.

최원빈님의 프로필 이미지
최원빈

작성한 질문수

질문하기