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

리나님의 프로필 이미지
리나

작성한 질문수

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

1번 문제 풀이

제가 풀어본 Ollivander's Inventory 문제 틀린 이유 알고 싶습니다.

작성

·

186

2

SELECT w.id, wp.age, w.coins_needed, w.power
FROM Wands AS w
INNER JOIN Wands_Property AS wp
ON (w.code = wp.code)
INNER JOIN (
    SELECT id, MIN(coins_needed)
    FROM Wands
    GROUP BY id, code, power
) AS T
ON (w.id = T.id)
WHERE wp.is_evil = 0
ORDER BY w.power DESC, wp.age DESC

이 SQL은 왜 틀린건가요?

출력은 되긴 하지만

틀리다고 나오네요.

조인 중에서

INNER JOIN (

    SELECT id, MIN(coins_needed)

    FROM Wands

    GROUP BY id, code, power

) AS T

이부분이 핵심인데요. 결국 GROUP BY 를 

id, code, power를 하나 code, power를 하나 같지 않는건가요?

결국 해당 GROUP BY 를 해서 coins_needed가 가장 작은 액수만 출력하게 했고

그것을 전체 출력해서 INNER JOIN통해 필터링 하는 전략을 세워보았습니다.

이론상 틀리지 않아 보이는데... 제 주관적인 생각입니다 ㅠㅠ

이유가 무엇일까요?

답변 1

2

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

ID는 지팡이 하나 당 하나씩 고유하게 부여되는 값으로 서로 같은 ID를 갖는 지팡이는 없습니다. code와 power가 똑같은 지팡이끼리도 서로 다른 ID를 갖고 있어요. 
ID를 기준으로 그룹을 나눈다면 지팡이 수만큼의 그룹이 나올 것이고, 각 그룹 안에서 집계를 하게 됩니다. 데이터가 하나 밖에 없으니 어떤 집계를 하더라도 같은 결과(해당 데이터 값)가 나오겠죠. 그러므로 GROUP BY 절에는 ID를 포함시키지 않아야 합니다. 

리나님의 프로필 이미지
리나

작성한 질문수

질문하기