inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

6-5 질문 있습니다!

해결된 질문

51

안일호

작성한 질문수 9

0

데이터 검증 강의에 대한 내용은 감명깊게 수강하였고, 강의의 쿼리 외적으로 질문이 있습니다ㅎㅎ

 

저는 이 강의의 문제만 보고 빅쿼리에서 스스로 문제 풀기를 3일간 도전하였는데, 결국 풀지 못한 채 강의를 보게 되었습니다!

 

제 사고 과정은 다음과 같습니다.

1. 총 배틀 횟수 계산이 난해하다.
2. '각 트레이너'의 정보를 얻으려면 battle 테이블과 trainer 테이블을 조인하여 t.trainer_id = b.player_id를 확인해야 할 것으로 예상된다.
3. trainer 테이블을 기준으로 battle 테이블을 LEFT JOIN 한다.

 

그런데 강의 03:57 ~ 04:03 부분을 확인해보니, player_id를 기준으로 trainer_id를 매핑시키는 방식의 쿼리를 작성하셨더라고요!

 

Q. 제가 최초에 trainer_id 컬럼을 기준 삼았다고 가정할 때, trainer_id = player_id 이 불편함을 깨닫고 player_id = trainer_id 으로 관점을 바꾸면 좋겠다고 생각할 근거가 있다면 무엇일지 궁금합니다..!

 

나름 최선의 표현으로 글을 다듬었지만, 이 질문이 난해할 수 있다고 생각하고요..! 원하는 답을 얻지 못할 확률이 높다고 생각하면서도 혹시나 하여 질문드립니다. 감사합니다!

sql bigquery 데이터-리터러시

답변 3

1

카일스쿨

안녕하세요.

질문이 잘 이해가 안되네요.

Q. 제가 최초에 trainer_id 컬럼을 기준 삼았다고 가정할 때, trainer_id = player_id 이 불편함을 깨닫고 player_id = trainer_id 으로 관점을 바꾸면 좋겠다고 생각할 근거가 있다면 무엇일지 궁금합니다..!


여기에 있는 trainer_id = player_id는 사실 바꾸더라도 의미상 똑같은데요. JOIN에서 어떤 테이블을 왼쪽에 두어야 하는지에 대한 관점인가요?


3분 57분 경에 있는 쿼리는

SELECT
*
FROM 'basic. battle'
WHERE
(player1_id = 7) OR (player2_id = 7)

이런 모습인데 갑자기 JOIN 이야기가 나와서 어떤 맥락인지 헷갈리네요.

6-5 문제에서는 트레이너에 대한 분석이 아니라 "배틀에 대한 분석"을 해달라고 했으므로 배틀이 핵심적인 테이블이에요.

0

안일호

제가 조인을 먼저 생각한 이유는, 우선 총 배틀 횟수를 구하기 위해 battle 테이블에서 트레이너 단위 그룹핑이 필요하다고 생각하였는데, battle 테이블(원본 기준)만으로는 어려울 것 같다는 생각이 들었습니다..!

 

우선 여기가 제가 생각한 첫번째 병목입니다! 필요한 컬럼이 없으면 만들면 된다는 사실을 새삼 깨닫게 되었습니다.

 

UNION ALL 기능은 전혀 떠올리지 못한 채, trainer 테이블의 id 컬럼을 매개로 하여 player1, player2를 연결하면 그룹핑하여 집계할 수 있지 않을까? 하는 생각이었습니다ㅎㅎ

 

두 번째 깨달음은, 답변주신 내용의 '트레이너 테이블의 컬럼이 쓰이지 않으니 JOIN을 할 이유가 없다'는 내용입니다! 이에 비추어보면, 조인 없이 battle 테이블 내에서 해결할 방안을 한번쯤 떠올려볼듯 합니다ㅎㅎ

 

여전히 무슨 말로 표현해야 할지 감이 오지는 않지만, 아무쪼록 의문은 모두 해소되었습니다! 감사합니다!!

0

안일호

우문현답 감사드립니다ㅎㅎ

 

(기존 테이블 기준) 저는 문제만 본 상황에서, 각 트레이너의 배틀 횟수를 구하려면 아래와 같은 쿼리를 작성해야겠다고 생각했는데요..!

SELECT
-- 승리 수 / 총 배틀 횟수
FROM basic.trainer AS t
LEFT JOIN basic.battle AS b
    ON t.id = b.player1_id
    OR t.id = b.player2_id
GROUP BY t.id
HAVING COUNT(t.id) >= 9

 

JOIN 자체를 할 필요가 없는 상황인데 저는 '왜 JOIN을 전제하여 문제를 생각하게 되었는지', 그리고 강의를 확인해보니 '왜 JOIN에서 빠져나오지 못했는지'가 궁금해 질문드리게 되었습니다ㅎㅎ

 

명확하지 않은 질문에도 좋은 답변 남겨주셔서 감사합니다!

1

카일스쿨

일호님이 어떻게 생각했는지에 대한 이유를 제가 정확힌 알 수 없고 일호님이 스스로 질문을 하며 찾아야 하겠지만, 제 경험에 근거해 추측하면, 데이터(테이블)에 대해 충분히 이해를 못한 경우 그렇게 생각하는 경우가 있습니다. (+어떤 최종 결과가 필요한지에 대해 생각을 해보는 습관이 적은 경우, 그냥 트레이너니까 트레이너 JOIN이라고 생각하는 경우도 보긴 했습니다. 트레이너가 들어간다고 무조건 JOIN이 아니라 테이블 살펴보고 고민해야 합니다)


배틀 테이블을 보면 player1_id, player2_id가 있고, 지금 제공 드린 4개의 테이블은 모두 포켓몬과 관련된 데이터입니다. 지금 player에 대한 개념이 트레이너라는 것을 인지를 못해서 JOIN을 고민했을 것 같고, 지금 강의의 문제에서는 트레이너의 속성을 가지고 집계를 하지 않습니다(트레이너의 컬럼이 쓰이지 않음) 그렇기 때문에 JOIN을 할 필요가 없는거죠.


  • 테이블에 대한 정확한 이해

  • 지금 뽑으려고 하는 것에서 어떤 컬럼이 필요한가 고민해보기 => 최종 결과에 트레이너의 속성이 포함되지 않음



3번 문제 질문!

0

23

2

1-2 battle 테이블 설정 질문 있습니다.

0

30

1

12강 집계 함수 8번 연습문제 질문

0

38

1

vs code

0

88

2

수업자료 다운

0

104

2

쿼리 화면 문의

0

110

2

4-5. 3번 문제 질

0

103

2

JOIN 1번 문제

1

106

2

battle 테이블 생성 시 생성 오류

0

100

1

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

0

81

2

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

1

94

2

battle table 오류

0

111

2

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

0

85

2

12강 집계 함수

0

71

1

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

0

68

1

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

0

74

1

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

0

88

1

섹션 별 퀴즈

0

88

1

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

0

150

2

Syntax에러

0

119

2

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

0

118

2

시각화 도구 사용

0

136

2

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

0

121

1

big query 쿼리 결과 컬럼 폭

0

137

3