inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

2번 문제 풀이

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

265

최원빈

작성한 질문수 45

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;

sql

답변 1

0

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

강의기간 연장문의

0

107

2

HackerRank : Weather Observation Station 11 문제풀이

0

124

1

SET4의 3번 자리바꾸기 문제 다른 풀이

0

197

1

set 3의 3번 문제- 데이터의 개수가 짝수일 때 질문

0

277

2

set 1 - 2번 문제풀이

0

270

1

세트2번 Binary Tree Nodes 질문입니다!

0

231

2

고급문제풀이set1 3번 문제

0

255

2

고급문제풀이 3번 INNERJOIN 활용시 오류

0

274

1

회사일하다 보니까 다 못듣고 수강기간이 다끝나가는데 .,. 수강기간 연장은 어떻게 할수 있나요?ㅜㅜ

0

325

1

[Weather 20 ] 2번째 쿼리도 따라 했는데 왜 다 실패일까요?

0

382

1

[Weather 20] 따라 했는데 왜 작동 안해요?

0

283

1

weather-20 왜 작동 안하는건가요?

0

234

1

Ollivander's Inventory 윈도우 함수 min() over

0

320

1

LeetCode 626. Exchange Seats 리트코드 제출 오류

0

510

2

섹션4에 3번 문제풀이 질문

0

387

2

SQL Project Planning 풀이 관련 문의

0

589

2

섹션 1번 4번문제 풀이

1

290

1

섹션1 2번 문제풀이 강의

0

309

1

set2 - 1 같게 작성했는데 답이 이상합니다.

0

289

1

max함수를 써서 풀지는 못하나요?

0

306

1

윈도우 함수를 이용해서 풀고 싶어서 써봤습니다. 더 간단하게 줄일 수 있을까요?

0

265

1

(Hacker Rank)Binary Tree 문제 질문

0

329

1

쿼리 두개로 작성하고 싶지 않아 하나로 어떻게든 만들어 봤습니다.

0

300

1

이런 풀이는 왜 안되는지 궁금해요

0

280

1