inflearn logo
강의

Course

Instructor

SQL data analysis learned through various cases

Get page-by-page bounce rate with SQL - 01

cnt/max로 구한 결과의 차이

100

kwondokyun05224835

1 asked

0

교수님 수업 항상 잘 듣고 있습니다 감사합니다!

다름이 아니라 영상 3분 쯤에서 sess_cnt 구할 때 영상에서

count(*) over (partition by b.sess_id rows between unbounded preceding and unbounded following) as sess_cnt

이런식으로 구했는데, 이건 sess_id 별로 몇 개 seq_hit가 있는지 count한걸로 이해합니다.

근데 count 말고

max(hit_seq) over (partition by sess_id order by hit_seq desc)로 최대 seq를 구해도 되는거 아닌가요? 이렇게 하니까 결과가 차이가 좀 나오는데 왜 나오는지 혹시 설명해주실 수 있을까요?

감사합니다.

sql postgresql dbms/rdbms 퍼포먼스-마케팅 데이터-엔지니어링

Answer 2

0

dooleyz3525

안녕하십니까,

첫번째 이유는 window 절이 다릅니다. rows between unbounded preceding and unbounded following을 사용하지 않았기 때문에 max(hit_seq)가 window를 session_id 내에서 순차적으로 이동하면서 계산하기 때문에 계산 결과가 다릅니다.

두번째 이유는 아래 인프런 AI 인턴이 잘 답변해 주었군요. 그대로 인용해 보면,

max(hit_seq) over (partition by sess_id order by hit_seq desc):

이 방법은 각 sess_id 그룹에서 hit_seq의 최대값을 구합니다. 여기서 hit_seq가 동일한 세션 내에서 고유의 값이 아닐 경우, 최대값을 사용하는 것은 오해를 불러일으킬 수 있습니다.

예를 들어, hit_seq의 값이 실제로 누락되거나 비연속적으로 증가하는 경우가 있을 수 있습니다. 그럴 경우 최대값과 실제 개수 간의 차이가 발생할 수 있습니다.

 

그러니까, hit_seq가 보통은 순차적으로 생성이 되지만, 만에 하나 그렇게 나오지 않을 수가 있습니다. 예를 들어 데이터를 생성하는 application에서 잘못해서 hit_seq를 연속적으로 입력하지 못하거나, 또는 중간에 값이 빠진 상태로(1, 2, 그리고 5로) 만들어 질 수 있습니다. 그렇기 때문에 max(hit_seq)와 같이 적용하시면 정확한 답이 안 나올 수 있습니다.

 

감사합니다.

 

0

kwondokyun05224835

이해했습니다. 감사합니다!

0

communityai8509

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

권도균님, 질문 주신 내용에 대해 답변드리겠습니다.

질문하신 쿼리는 sess_id 별로 seq_hit의 개수를 계산하거나 또는 hit_seq의 최대값을 구하는 방법에 대한 것입니다. 이 두 가지 접근 방식은 서로 다른 결과를 제공할 수 있으며 그 이유에 대해 설명드리겠습니다.

  1. count(*) over (partition by sess_id):

    • 이 방법은 각 sess_id 그룹마다의 hit_seq의 개수를 셉니다. 즉, 각 세션에 포함된 전체 히트의 수를 나타냅니다.
    • 예를 들어, 특정 sess_id에 히트가 5개가 있다면 결과는 5로 나타납니다.
  2. max(hit_seq) over (partition by sess_id order by hit_seq desc):

    • 이 방법은 각 sess_id 그룹에서 hit_seq의 최대값을 구합니다. 여기서 hit_seq가 동일한 세션 내에서 고유의 값이 아닐 경우, 최대값을 사용하는 것은 오해를 불러일으킬 수 있습니다.
    • 예를 들어, hit_seq의 값이 실제로 누락되거나 비연속적으로 증가하는 경우가 있을 수 있습니다. 그럴 경우 최대값과 실제 개수 간의 차이가 발생할 수 있습니다.

따라서 데이터를 처리할 때는 각 세션의 전체 히트 개수를 알고 싶을 때는 count 사용이 적절하며, hit_seq의 최대값을 구해야 할 특별한 이유가 있을 때는 max 사용을 고려할 수 있습니다.

유사한 주제에 대해 더 배우고 싶으시다면, 아래의 URL에 제공된 답변을 참고하시면 도움이 될 것입니다:
- 데이터와 쿼리 작성 조언 받을 수 있을까요?

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

"주문별 고객별 연관 상품 추출 SQL로 구하기-02" 수업 질문

0

52

2

쿼리 질문있습니다!!

0

49

2

없는강의요청해도됩니까,,

0

90

2

아래와 동일한 질문에 대한 추가질문입니다

0

70

2

쿼리에 대한 질문이 있습니다.

0

116

2

퍼널 질문드립니다.

0

112

1

ADSP자격증

0

282

2

특정 스키마에서 생성한 편집기의 쿼리를 판다스에 삽입하는 방법

0

161

1

백업파일 테이블 생성 오류

0

235

1

"사용자별 특정 상품 주문시 함께 가장 많이 주문된 다른 상품 추출하기"에서 조건관련..

0

161

1

Plotly을 이용해 treemap시각화시 공유사항

0

277

2

월단위 카테고리별 매출액과 주문건수 및 전체매출액 대비 비율 sql로 구하기 수업 중 질문이 있습니다.

0

248

1

with 절 질문

0

240

1

데이터 분석 SQL Fundamentals 강의 할인 문의

0

215

1

리텐션 구하는 방법 문의

0

215

1

캐글데이터 Postgresql 사용

0

355

2

mau 구할때 group by 사용안해도 count 집계함수가 왜 가능한지 모르겠습니다.

0

262

1

매출분석 1에서 partition by와 group by의 차이

0

355

1

postgres 설치 오류

0

318

1

맥 계정에서 postgres 접속 시 비밀번호 입력 실패현상

1

542

2

pandas 연계시 오류.....

0

1242

3

시각화 그래프가 안보여요

0

299

1

ntile 정규분포에 관하여 ... 향후 일을 하게 될 시

0

358

1

사용자별 월별 세션 접속 횟수의 구간별 분포 집계 SQL - where절

0

393

1