강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của kwondokyun05224835
kwondokyun05224835

câu hỏi đã được viết

Phân tích dữ liệu SQL được học qua nhiều ví dụ khác nhau

Tính tỷ lệ thoát theo trang bằng SQL - 01

cnt/max로 구한 결과의 차이

Viết

·

87

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를 구해도 되는거 아닌가요? 이렇게 하니까 결과가 차이가 좀 나오는데 왜 나오는지 혹시 설명해주실 수 있을까요?

감사합니다.

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

Câu trả lời 2

0

dooleyz3525님의 프로필 이미지
dooleyz3525
Người chia sẻ kiến thức

안녕하십니까,

첫번째 이유는 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)와 같이 적용하시면 정확한 답이 안 나올 수 있습니다.

 

감사합니다.

 

kwondokyun05224835님의 프로필 이미지
kwondokyun05224835
Người đặt câu hỏi

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

0

안녕하세요, 인프런 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에 제공된 답변을 참고하시면 도움이 될 것입니다:
- 데이터와 쿼리 작성 조언 받을 수 있을까요?

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

Hình ảnh hồ sơ của kwondokyun05224835
kwondokyun05224835

câu hỏi đã được viết

Đặt câu hỏi