해결된 질문
작성
·
89
0
안녕하십니까 선생님,
JOIN을 할때 조건들을 처리해놓고 조인을 하시라고 하셨는데
영상에 나온 답과 같지만 풀이법이 달라서
아래와 같이 작성해도 큰 문제가 없겠죠?
select type1, count(p.type1) as grass_cnt
from (
select trainer_id,
pokemon_id
from basic.trainer_pokemon
where 1=1
and status != 'Released'
) as tp
left join basic.pokemon as p
on tp.pokemon_id = p.id
where 1=1
and p.type1 = 'Grass'
group by type1
답변 2
0
안녕하세요. 지금 데이터에선 동일한 결과가 나올 것 같은데, 만약 status에 다른 value가 있었다면 명시적으로 쓸 것 같아요(강의의 답처럼) 어떤 조건이 아니다!라고 하는 것은 특정 Value가 생기면 데이터가 의도와 달라질 수 있어서 저는 != 보단 명시적으로 특정 조건만 해당하도록 하고 있어요(물론 상황에 따라 !=가 좋은 경우도 있구요. 상황에 따라 다르긴 하네요)
0
안녕하세요, 인프런 AI 인턴입니다.
donig1225님께서 작성해 주신 쿼리는 기본적으로 올바른 형식을 따르고 있습니다. JOIN을 수행할 때 임시 테이블 형태로 필요한 데이터를 미리 필터링하여 조인하라는 것은 일반적인 SQL 최적화 방법 중 하나입니다. 이렇게 함으로써 조인해야 할 데이터의 양을 줄여 성능을 향상시킬 수 있습니다.
다만, 쿼리를 작성할 때 몇 가지 유의사항을 고려할 필요가 있습니다:
임시 테이블: basic.trainer_pokemon
에서 조건을 만족하는 데이터만을 필터링한 후 조인합니다. 이를 통해 최적화된 조인을 기대할 수 있습니다.
필터 조건: status != 'Released'
조건을 사용하여 이미 방출된 포켓몬을 제외하고 처리합니다. 이 부분은 데이터의 양을 줄이며 실질적인 분석을 돕습니다.
WHERE 절 조건: p.type1 = 'Grass'
를 사용하여 Grass 타입의 포켓몬만을 선택하고 있으며, 이는 조인 후에 원하는 특정 데이터만 추출하려는 데 적절합니다.
전체적으로 보면, 작성하신 쿼리에서는 Grass
타입의 포켓몬을 포함하는 레코드들을 필터링하고, 그 카운트를 결과로 반환하는 형태입니다.
쿼리 작성의 최적화 여부와 관계 없이, 로직의 결과를 확인하여 사용자의 기대 결과와 일치하는지를 검증하는 것이 매우 중요합니다. 작성하신 방식과 강의에서 제시한 방법은 데이터를 최적화하는 측면에서의 미세한 차이가 있을 수 있으며, 데이터세트의 특성과 작성자의 의도에 따라 다르게 구현될 수 있습니다.
이와 같은 SQL 쿼리는 작성자의 고유한 선택이며, 필요한 경우 성능 테스트를 통해 효율성을 직접 비교해 보는 것도 좋은 방법입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 이에 해당하는 자세한 설명을 Join
문제와 관련하여 살펴볼 수 있는 관련 질문 링크 를 참조하시기 바랍니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.