• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

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

22.07.02 00:17 작성 조회수 146

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

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 절에 서브쿼리를 사용하는 것이 훨씬 명확한 풀이인 듯 합니다.