inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

5-6. JOIN 연습 문제 1~2번

5-6 1번 문제 풀이법

해결된 질문

217

5

작성한 질문수 5

0

안녕하세요 카일스쿨님!

5-1번 문제를 아래와 같이 SQL을 작성해 풀어보았는데요.

답이 나오질 않았습니다.

혹시 해당 쿼리에 어떤 문제가 있어 답이 나오지 않았을지 여쭤봅니다.

image.png

감사합니다!

sql bigquery 데이터-리터러시

답변 1

0

카일스쿨

5님 안녕하세요.

현재 쿼리가 실행이 되실지 궁금하네요. 쿼리가 아예 실행이 안된다면 오류 메시지를 알려주시는게 어떤 가이드를 드리는데 도움이 되어요.

(직접 쿼리를 작성하고 오류를 확인해보니) No matching signature for operator OR for argument types: BOOL, STRING. Supported signature: BOOL OR ([BOOL, ...]) at [3:10]라는 오류가 발생하네요. 이 오류는 OR 조건을 설정할 때 타입이 달라서 발생하는 오류입니다. 앞엔 Bool, 뒤에는 STRING이란 의미지요.

 

COUNTIF에서 A.status를 해주셨는데, 다음과 같이 작성해주셔야 합니다

COUNTIF(A.status = "Active" OR A.status = "Training") AS pokemon_cnt

 

그 이유는 SQL에서 비교 연산자(=)는 논리 연산자(OR)보다 우선 순위가 높습니다. 그래서 현재 작성해주신 것은 다음과 같이 해석이 됩니다. (A.status = "Active") OR "Training". 이 부분은 산수에서 곱셈, 더하기의 우선순위랑 비슷하게 생각하시면 됩니다.

 

(A.status = "Active") OR "Training" 이 부분에서 앞에 A.status="Active"는 True, False를 반환합니다. 하지만 뒤에 있는 Training은 문자열이기 때문에 직접 비교할 수 없습니다. 비교는 같은 타입끼리 가능합니다(그래서 위에 No Match 오류가 발생한 것이지요)

 

아마 두 문자를 연결해서 OR로 처리하려고 하셨을 것 같은데, SQL에선 이것이 동작하지 않고, 원하시는대로 하시려면 IN으로 하시거나 제가 위에서 말씀드린 것처럼 명시적으로 A.status를 두번 작성해야 합니다

 

COUNTIF(A.status IN ("Active", "Training"))

 

정리하면 아래 두 쿼리들이 실행이 될거에요

IN을 사용한 방법

SELECT
  B.kor_name AS pokemon_name,
  COUNTIF(A.status IN ("Active", "Training")) AS pokemon_cnt
FROM basic.trainer_pokemon AS A
LEFT JOIN basic.pokemon AS B
ON A.pokemon_id = B.id
GROUP BY
  pokemon_name

 

A.status를 2번 명시

SELECT
  B.kor_name AS pokemon_name,
  COUNTIF(A.status = "Active" OR A.status = "Training") AS pokemon_cnt
FROM basic.trainer_pokemon AS A
LEFT JOIN basic.pokemon AS B
ON A.pokemon_id = B.id
GROUP BY
  pokemon_name

 

이해가 안되시거나 다른 오류가 발생한다면 말씀해주셔요.

1

5

카일님 궁금한 부분이 완벽하게 해결되었습니다.

빠른 답변 정말 감사드립니다 !!!!

항상 화이팅입니다!

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