5-3 문제 trainer_pokemon을 LEFT에 두면
선생님, 안녕하세요. 강의 잘 듣고 있습니다!
다름이 아니라 3번 문제에서 trainer를 LEFT에 두시고 계산하셨는데, 저는 trainer_pokemon을 LEFT에 두고 계산했더니 오류가 뜹니다.
SELECT COUNT(DISTINCT tp.trainer_id) AS trainer_cnt
FROM basic.trainer_pokemon AS tp
LEFT JOIN basic.trainer AS t
ON tp.location = t.hometown
WHERE tp.location = t.hometown그렇다고, COUNT에 DISTINCT를 없애니
결과값이 3003개로 나옵니다.
답변 2
0
아경님 안녕하세요. 어떤 오류가 생기시나요?
해당 쿼리를 실행했는데 저는 오류가 뜨지 않고 결과가 89로 나오네요..!
0
안녕하세요, 인프런 AI 인턴입니다.
아경님께서 작성하신 쿼리에서 trainer_pokemon을 LEFT에 두고 JOIN을 하면서 발생한 문제에 대해 공유해주셨습니다. 이를 이해하고 해결하기 위해 몇 가지 중요한 점을 정리해보겠습니다.
LEFT JOIN의 동작 원리 상, trainer_pokemon 테이블을 LEFT에 두고 trainer 테이블의 hometown 과 매칭하려고 할 때, trainer 테이블에 해당 hometown이 존재하지 않는다면 NULL 값을 반환하게 됩니다. 그러나 WHERE 절에서 tp.location = t.hometown 조건을 사용하시면서, 이러한 NULL 값의 행이 제외됨에 따라 LEFT JOIN의 의미가 약화되었습니다.
주요 해결책:
- LEFT JOIN을 사용할 때, 해당 조인 조건을
ON절에 두는 것이 일반적입니다.WHERE절에 동일한 조건을 두시면, 이너 조인과 같은 효과를 줄 수 있습니다. 이는LEFT JOIN의 특성을 활용하지 않는 결과를 초래하게 됩니다.
제안 드리는 개선 방안:
ON절의 조인 조건을 사용하고, 조건을 추가하는 부분에서 내용을 검토해보시는 게 좋습니다.
- DISTINCT에 의존하지 않고, 필요한 결과를 얻기 위해서 조인 조건과 중복 데이터를 처리하는 방법을 검토하세요.
예시 개선 쿼리:
SELECT COUNT(DISTINCT t.id) AS trainer_cnt
FROM basic.trainer_pokemon AS tp
LEFT JOIN basic.trainer AS t
ON tp.location = t.hometown
이렇게 하시면, LEFT JOIN의 특성을 유지하면서, 실제로 trainer가 있어야 한다는 조건이 자연스럽게 만들어지며 DISTINCT가 의미 있게 작동할 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 관련 질문을 통해 비슷한 상황을 학습할 수 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
vs code
0
48
2
수업자료 다운
0
46
2
쿼리 화면 문의
0
70
2
4-5. 3번 문제 질
0
64
2
JOIN 1번 문제
1
73
2
battle 테이블 생성 시 생성 오류
0
68
1
5-6. 4번 문제 WHERE 조건의 위치 문의
0
64
2
5-6. 연습문제 4번, type2에 대해서는 고려하지 않아도 될까요?
1
68
2
battle table 오류
0
68
2
location IS NOT NULL 을 굳이 안 써도 되지 않나요?
0
61
2
12강 집계 함수
0
48
1
2-6. 연습 문제 1~3번
0
49
1
안녕하세요! 11번 문제 query문에 관해 질문드립니다
0
49
1
2-6 #2 WHERE vs. HAVING절 사용 여부 차이
0
65
1
섹션 별 퀴즈
0
64
1
espanso 설치 완료 후 프로그램 실행 문제
0
102
2
Syntax에러
0
81
2
4-5. 1번 문제 TIMESTAMP 관련 질문
0
87
2
시각화 도구 사용
0
109
2
11번 문제 GROUP BY 사용하는 이유
0
98
1
big query 쿼리 결과 컬럼 폭
0
107
3
battle 스키마 조건 복사 파일이 열리지 않아요.
0
128
1
6-5 데이터 검증 결과 예시문제
0
78
2
battle 스키마 조건 복사붙여넣기용 자료
0
113
2





