inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

초보자를 위한 BigQuery(SQL) 입문

5-6. JOIN 연습 문제 3~5번

JOIN 연습문제 5번 문제 관련해서 질문이 있습니다!

해결된 질문

268

비가싫어요

작성한 질문수 87

0

안녕하세요! 좋은 강의 감사드립니다. 도움이 많이 되고 있어요.

5번 문제 관련해서 질문이 있습니다. 5번 문제에 대해서 저는 쿼리를 이렇게 작성했습니다.

SELECT
  generation,
  COUNT(tp.id) AS pokemon_cnt
FROM
(
  SELECT
    id,
    trainer_id,
    pokemon_id,
    status
  FROM `basic.trainer-pokemon`
) AS tp
LEFT JOIN basic.trainer AS t
ON tp.trainer_id = t.id
LEFT JOIN basic.pokemon AS p
ON tp.pokemon_id = p.id
WHERE
  t.hometown = 'Incheon'
  AND tp.status IN ('Active', 'Training')
GROUP BY
  generation
ORDER BY
  pokemon_cnt DESC

강의에서 카일님과 다른 부분은 WHERE 절에 AND 가 더 추가된 부분이에요.

문제에서 '보유하고 있나요?' 라고 물어서 저는 저 조건을 추가해줬는데 카일님은 추가해주시지 않았는데도 제 쿼리와 결과가 같게 나오더라구요.

우연히 인천에 있는 트레이너들의 status가 다 Active, Training 이어서 이렇게 된 것인지 아니면 저 조건이 필요가 없는 것인지 궁금합니당!

sql bigquery 데이터-리터러시

답변 2

0

카일스쿨

happycoding님 안녕하세요!

제가 강의에서 다룬 쿼리문은 다음과 같아요


SELECT
  generation,
  COUNT(tp.id) AS pokemon_cnt
FROM (
SELECT
  id,
  trainer_id,
  pokemon_id,
  status
FROM basic.trainer_pokemon
WHERE
  status IN ("Active", "Training")
) AS tp
LEFT JOIN basic.trainer AS t
ON tp.trainer_id = t.id 
LEFT JOIN basic.pokemon AS p
ON tp.pokemon_id = p.id
WHERE
  t.hometown = "Incheon"
GROUP BY
  generation

여길 보면 "trainer_pokemon"에서 id, train_id, pokemon_id, status를 가져오는(쿼리 상에서 5번째 줄부터 12번째 줄) 부분에서 status에 Active, Training을 걸어줬답니다. 해피코딩님은 바깥에서 하신거고 저는 서브 쿼리에서 실행한거죠. 지금의 쿼리가 결과론적으론 같을 수 있는데 저는 서브쿼리로 데이터를 줄인 후에 처리하고 싶어서 미리 서브쿼리에서 데이터를 줄였다고 보시면 됩니다

 

우연히 인천에 있는 트레이너들의 status가 다 Active, Training 이어서 이렇게 된 것인지에 대한 것은 실제 쿼리에서 확인해보시면 됩니다. 어떻게 쿼리를 작서해야 할까요? 데이터 검증 파트를 보시고 오셔도 괜찮고, 한번 작성해보셔요. 제가 바로 답을 드리면 해피코딩님이 그렇구나~라고 하실 수도 있어서 질문을 먼저 해봅니다

인천에 있는 트레이너들의 status가 Active, Training만 있는지 혹은 다른 Value도 있는지 확인하기 위해선 어떻게 쿼리를 작성해야 할까요?

 

 

1

비가싫어요

아 카일님이 서브쿼리에서 작성하신 부분을 제가 놓쳤네요!😅 친절한 답변 감사합니다~ 말씀해신 부분도 고민해보도록 할게요 :D 좋은 하루 되세요!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

질문하신 JOIN 연습문제 5번과 관련하여, 필터링 조건에 관한 부분에서 혼란이 있으신 것 같습니다. 특히, WHERE 절에 AND tp.status IN ('Active', 'Training')를 추가하는 부분에 대한 궁금증인 것으로 이해됩니다.

이와 유사한 상황을 다룬 기존 답변을 찾아보니, 질문자님과 비슷한 상황에 대한 설명이 포함된 답변이 있어 이를 공유드립니다. 해당 설명은 다른 문제와 관련 있으나, JOIN 문제를 해결할 때 필터 조건을 어떻게 설정해야 하는지에 관한 이해를 돕는 데 도움이 될 수 있습니다.

관련 답변:

  • join 3번, 4번 문제에서는 LEFT JOINWHERE 조건을 어떻게 사용하는지에 대해 설명하고 있습니다. 선택적으로 결과를 필터링하는 데 있어 WHERE 절에서 상태를 명시하는 것과 관련해 유용한 인사이트를 제공합니다.

통상적으로 SQL 쿼리에서는 WHERE 절을 사용하여 결과를 필터링합니다. 질문하신 구체적인 상황에서, t.hometown = 'Incheon' AND tp.status IN ('Active', 'Training') 조건을 추가한 것은, 인천에 거주하는 트레이너들 중에서 활동 중이거나 훈련 중인 포켓몬에 초점을 맞추려는 의도로 해석될 수 있습니다. 이는 특정 조건에 맞는 레코드만을 결과에 포함시키려는 목적을 달성하기 위한 적절한 접근법입니다.

카일님의 쿼리에서 해당 조건을 명시하지 않았음에도 불구하고 결과가 같게 나왔다면, 우연히 해당 데이터 세트 내에서 인천에 거주하는 모든 트레이너들의 포켓몬 상태가 ‘Active’나 ‘Training’이었을 가능성이 있습니다. 이 경우, 추가적인 WHERE 조건이 결과에 영향을 미치지 않았을 것입니다.

이와 같이, SQL 쿼리를 작성할 때는 데이터의 구체적인 상황을 고려하여 조건을 추가하는 것이 중요합니다. 특정한 데이터 세트에 대해 더 정확한 결과를 얻기 위해 필요한 조건을 적절히 추가하는 것이 좋습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

vs code

0

51

2

수업자료 다운

0

49

2

쿼리 화면 문의

0

72

2

4-5. 3번 문제 질

0

66

2

JOIN 1번 문제

1

76

2

battle 테이블 생성 시 생성 오류

0

69

1

5-6. 4번 문제 WHERE 조건의 위치 문의

0

65

2

5-6. 연습문제 4번, type2에 대해서는 고려하지 않아도 될까요?

1

71

2

battle table 오류

0

69

2

location IS NOT NULL 을 굳이 안 써도 되지 않나요?

0

62

2

12강 집계 함수

0

49

1

2-6. 연습 문제 1~3번

0

50

1

안녕하세요! 11번 문제 query문에 관해 질문드립니다

0

51

1

2-6 #2 WHERE vs. HAVING절 사용 여부 차이

0

67

1

섹션 별 퀴즈

0

67

1

espanso 설치 완료 후 프로그램 실행 문제

0

104

2

Syntax에러

0

83

2

4-5. 1번 문제 TIMESTAMP 관련 질문

0

89

2

시각화 도구 사용

0

110

2

11번 문제 GROUP BY 사용하는 이유

0

99

1

big query 쿼리 결과 컬럼 폭

0

108

3

battle 스키마 조건 복사 파일이 열리지 않아요.

0

130

1

6-5 데이터 검증 결과 예시문제

0

79

2

battle 스키마 조건 복사붙여넣기용 자료

0

115

2