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