inflearn logo
강의

Course

Instructor

BigQuery(SQL) Application (Funnel Analysis, Retention Analysis)

2-11. Window Function Practice Problem (1)

윈도우 연습문제 1번 질문

Resolved

61

a4233841

4 asked

0

실행 결과는 동일하게 나왔는데, COUNT를 다르게 쓴 것이 괜찮은지 궁금해서 질문 남깁니다!

상황

궁금한 점

SELECT
  *,
  COUNT(*) OVER(PARTITION BY user) AS total_query_cnt
FROM advanced.query_logs
ORDER BY query_date, user

 

sql Google-Analytics firebase google-sheets bigquery 카카오공채-서비스

Answer 1

0

kyleschool

안녕하세요!

 

*의 의미를 본질적으로 이해하시면 좋답니다.

COUNT(*) : 모든 Row의 수를 COUNT한다는 의미입니다

COUNT(query_date) : query_date에 있는 값의 수를 COUNT한다는 의미입니다.

두개의 차이는 NULL을 포함하는지?입니다

COUNT(*)은 Row의 수를 세기 때문에 NULL도 포함해서 COUNT를 하고, COUNT(query_date)는 query_date에서 NULL이 아닌 행만 셉니다.

지금 데이터에서는 값에 NULL이 없기 때문에 동일하게 나오는거라 보면 됩니다. 데이터가 어떻게 저장되어 있는지를 잘 파악해야 *을 사용할지, 컬럼을 명시할지가 결정됩니다.

 

그리고 query_date를 사용한 이유는 query_date가 있는 경우를 세고 싶었기 때문이에요. 물론 지금 데이터는 *을 사용해도 괜찮구요. id 같은 값이 있었다면 id를 COUNT할텐데 id가 없는 데이터라 query_date를 COUNT했다고 생각해주시면 되어요

 

즉, 목적에 따라 다르다입니다. 실무에서 뭘 쓰냐는 결국에 목적에 따라 다릅니다. 내가 어떤 데이터를 보려고 하는지? 그래서 초보자를 위한 BigQuery 입문에서 쿼리를 작성할 때 어떤 것을 구하려고 하는지를 써보라고 템플릿을 드린 거예요. 이게 명시적으로 정리가 되어야 쿼리를 짤 때 판단을 할 수 있어요!

 

추가로 활용편의 데이터는 단일 테이블이고 NULL이 거의 없습니다. 그래서 강의를 들을 때는 두개 모두 다 상관없이 사용하셔도 됩니다.

실무에서 이슈가 되는 경우는 여러 테이블을 JOIN하면서 특정 컬럼에 NULL이 생길 수 있어요. 이럴 때는 데이터의 Row가 늘어난 것처럼 보일 수 있거든요. 이런 경우 *을 쓰면 Row 수만 세서 좀 많아집니다. 그래서 저는 명시적으로 컬럼을 쓰곤 해요. 이번 초보자를 위한 BigQuery 입문의 연습 문제에서 JOIN하고 COUNT하는 문제에서 많이 나타나게 된답니다. 

 

최종 과제 제출

0

79

3

BigQuery 활용편 18강 질문있습니다!

0

80

1

리텐션 공부하다가 궁금한게 생겨 질문드립니다

0

79

2

안녕하세요 강사님 코호트 쿼리 공부하다가 의문점이 생겨서 문의드립니다

0

70

2

biquery 테이블 생성 오류 이슈

0

51

2

동일하게 쿼리를 작성했는데 화면과 다른 값이 나옵니다

0

72

2

[과제] 퍼널 PIVOT 테이블 작성하기

0

64

2

array 등

0

61

2

N day 리텐션 쿼리 관련 질문

0

61

2

이동평균 계산 시 order by 기본값은 뭔가요?

0

66

2

user_id에 NULL이 나오는데 정상인가요?

0

70

2

3-13 리텐션 과제 제출

0

92

2

최종 과제 제출

0

129

3

weekly retention 구하기 과제

0

90

2

1-9. 피벗 쿼리 작성

0

78

2

app_logs 테이블 생성 문제

0

70

2

Weekly Retention 구하기 완성하였습니다.

0

75

2

[과제] 퍼널 쿼리(피벗테이블 적용) 작성 완료

0

104

2

3-7 Weekly, Monthly Retention 쿼리 작성

0

91

2

정성 데이터 분석 방법 문의

0

163

1

최종 과제 제출

0

105

3

1-6 예시 문제 풀이

0

66

2

최종과제 제출

0

141

2

3-13. 리텐션 과제

0

201

3