inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

4-5. 시간 데이터 연습 문제 3~5번

4-5 연습문제 4번

해결된 질문

209

이유정

작성한 질문수 4

0

안녕하세요.

 

4-5 연습문제 4번 서브쿼리 부분에서 질문이 있습니다.

서브쿼리에 꼭 * 이나 id를 써줘야 실행이 되는 이유는 무엇인가요??

처음에는 서브쿼리>select에서 카일님 풀이처럼 *를 안 해주고 실행했더니

Unrecognized name: id
라는 오류가 떴습니다.

 

구글링을 통해 알아보니, 서브쿼리에 id를 안 썼는데 바깥에 COUNT(DISTINCT id) as battle_cnt 를 써줘서 오류가 떴다고 했습니다.

 

왜 써줘야 하는지 알 수 있을까요??

sql bigquery 데이터-리터러시

답변 1

0

카일스쿨

안녕하세요!

4-5 연습문제 4번에서 서브쿼리에 *을 꼭 써야하는 이유는 서브쿼리 바깥에 있는 FROM 절 입장에선 서브쿼리가 일종의 테이블처럼 인식합니다.

 


SELECT
  day_of_week,
  COUNT(DISTINCT id) AS battle_cnt
FROM (
  SELECT
    *,
    EXTRACT(DAYOFWEEK FROM battle_date) AS day_of_week
  FROM `basic.battle`
)
GROUP BY
  day_of_week
ORDER BY
  day_of_week

 

위 쿼리에 서브 쿼리인

  SELECT
    *,
    EXTRACT(DAYOFWEEK FROM battle_date) AS day_of_week
  FROM `basic.battle`

 

위 쿼리를 실행해보면 다음과 같은 결과가 나타납니다

image

위에 결과에서 아래 쿼리를 실행하는 것으로 볼 수 있습니다

SELECT
  day_of_week,
  COUNT(DISTINCT id) AS battle_cnt
FROM 위 결과 테이블
GROUP BY
  day_of_week
ORDER BY
  day_of_week

 

만약 서브 쿼리에서 *을 제외했으면 아래와 같은 결과가 나타납니다

  SELECT
    EXTRACT(DAYOFWEEK FROM battle_date) AS day_of_week
  FROM `basic.battle`

 

image

즉, day_of_week 밖에 없는 데이터인거죠

 

그래서 아래 쿼리를 실행할 때, id가 없기 때문에 Unrecognized name(데이터에 해당 컬럼이 없다) 오류가 발생하는 것입니다

SELECT
  day_of_week,
  COUNT(DISTINCT id) AS battle_cnt
FROM 위 결과 테이블
GROUP BY
  day_of_week
ORDER BY
  day_of_week

 

그렇다면 여기서 COUNT(DISTINCT *)도 가능한가? DISTINCT를 할 때는 구체적인 컬럼을 명시해야 하기 때문에 실행이 안됩니다

그럼 COUNT(*)도 가능한가? 실행은 되지만 단순히 Row 수만 COUNT하게 됩니다. 지금 데이터에선 답이 같을 수 있지만, id가 중복으로 존재하는 테이블에서는 COUNT(*)은 의도와 다른 값이 나타날 수 있습니다. 그래서 id를 DISTINCT해서 고유값만 COUNT한 것이에요

 

정리하면, 서브 쿼리에 있는 컬럼이 있어야 바깥에서 불러올 수 있습니다. 일종의 테이블이라고 생각하시면 이해가 쉬울 것 같네요

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