강의

멘토링

로드맵

Inflearn brand logo image

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

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

작성한 질문수

5-6. JOIN 연습문제 1번 문제 풀이 순서

작성

·

10

0

안녕하세요 카일님!

해당 강의 통해 SQL에 대해 차근차근 배우고 있습니다. 감사합니다!

 

저는 5-6. JOIN 연습문제 1번을

  1. trainer_pokemon 테이블에서 status가 Active, Training인 경우만 필터링 (WHERE)

  2. 포켓몬 수 세기 (COUNT)

  3. pokemon 테이블이랑 이름 매칭 (JOIN)

이런 식으로 카일님과 COUNT, JOIN 실행 순서를 반대로 풀었는데, 우선 답은 동일하게 나온 것 같습니다.

 

COUNT로 중복된 포켓몬 id를 합쳐 데이터를 최대한 줄인 다음 JOIN을 실행하려는 목적이었는데,

혹시 문제에서 특별하게 COUNT를 마지막에 실행한 이유가 있을까요?

이런 풀이도 괜찮은지 여쭤보고 싶어 질문 남깁니다.

 

문제 풀이 코드 첨부합니다.

SELECT
  p.kor_name AS pokemon_name,
  tp.pokemon_cnt
FROM (
SELECT
  pokemon_id,
  COUNT(pokemon_id) AS pokemon_cnt
FROM `basic.trainer_pokemon`
WHERE
  status IN ("Active", "Training")
GROUP BY
  pokemon_id
) AS tp
LEFT JOIN `basic.pokemon` AS p
ON tp.pokemon_id = p.id

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.
이혜리님, 질문 감사드립니다!

이혜리님께서 설명하신 풀이 방법도 좋은 접근입니다. 데이터를 최대한 줄인 다음에 JOIN을 수행하는 것은 성능적인 측면에서 장점이 있을 수 있습니다. 그러나 문제에서 COUNT를 마지막에 실행하는 특별한 이유는, 데이터 처리의 흐름을 명확히 하고, GROUP BY와 COUNT의 역할을 강조하기 위함일 수 있습니다.

기존의 SQL 실행 계획은 데이터의 양과 인덱스 구조에 따라 최적화되기 때문에 결과적으로 Count를 먼저 하거나 마지막에 하거나 큰 차이 없이 동일한 결과가 나오기도 합니다.

따라서 이혜리님께서 선택하신 방식은 성능상이나 결과상으로 문제가 없다면 충분히 사용할 수 있는 방식이라고 할 수 있습니다. 다양한 방법으로 SQL 쿼리를 구현하면서 성능이나 가독성을 고려하는 것이 중요합니다.

추가로 궁금한 점이 있으시다면 언제든지 문의해 주세요! 계속해서 공부 힘내시길 바랍니다. 😊

Image URL
출처 링크

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

작성한 질문수

질문하기