inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

다양한 사례로 익히는 SQL 데이터 분석

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

count(*)와 count(distinct order_id)의 차이점이 궁금합니다.

695

asusman

작성한 질문수 2

0

훌륭한 강의를 듣고 있는 와중에 궁금점이 생겼습니다.

 

group by 를 수행한 후에 주문 건수를 집계할 때 count(*) 함수 혹은 count(distinct order_id)를 사용하시던데,

 

주문 번호가 중복되어있을 경우에는 distinct 함수를 통해 중복을 제거후 count() 집계를 사용해야 된다고 알고 있습니다.

그런데 

order별 특정 상품 주문시 함께 가장 많이 주문된 다른 상품 추출하기 쿼리에서,

select prod_01, prod_02, count(*)

from temp_01

group by prod_01, prod_02

부분을 보면 count(*)를 사용한 것이 이해가 잘 가지 않습니다 ㅠㅠ

그 앞의 temp_01 절에서 ga.order_items 테이블을 사용하는 데 해당 테이블에는 order_id가 중복되어 있는 것으로 알고 있습니다. 그러면 후에 건수 집계시 count(distinct temp_01.order_id)로 해야 하는 것이 아닌가 궁금합니다.

아니면 count(*)의 의미가 애초에 주문 건수를 의미하는 것이 아닌지 궁금합니다.

늘 수고 많으십니다.

 

postgresql sql DBMS/RDBMS 퍼포먼스 마케팅 데이터 엔지니어링

답변 1

1

권 철민

안녕하십니까, 

count(*)가 주문건수는 아닙니다. 

temp_01에서 만드는 집합은 order_items를 order_id로 셀프 조인해서 만들어 지는데, 이 집합의 레벨을 규정하는게 사실 좀 어렵습니다. 

굳이 정의하자만 동일 주문번호에서 주문 상품과 다른 주문 상품간의 관계정도가 됩니다.  

그러니까 PK레벨로 보자면 주문번호 + 특정주문 상품 + 동일 주문상의 다른 주문 상품 이라고 볼수 있습니다. 

예를 들어 order_items가 특정 주문 번호 001로 아래와 같은 세개의 주문 상품들 A, B, C를  주문했다고 한다면

주문번호 상품

001         A         

001         B

001         C

이를 이용해 만들어지는 temp_01은 동일 주문번호에서 개별 주문 상품별로 같이 주문된 상품들의 관계 집합 레벨로 아래와 같이 만들어 집니다.  

주문번호 기준상품코드  같이 주문된 상품코드

001                     A                            B

001                    A                             C

001                    B                             A

001                    B                             C

001                    C                             A

001                    C                             B

이 temp_01을 가지고 count(distinct 상품코드)를 이용하여 상품별 주문 건수를 계산할 수는 있습니다.  하지만 구하고자 하는 목표가 그건 아닙니다.  기준 상품 코드 별로 같이 주문된 상품코드가 몇건인지를 찾아내고 이를 이용해서 같이 주문이 많이된 연관 상품들을 추출하고자 함입니다.  

때문에 이를 구하기 위해서 group by 기준상품코드, 같이주문된 상품코드를 적용한 것입니다. 

구하고자 하는 목표가 다르기 때문에 count( distinct 상품코드)를 적용하지 않은 것입니다. 

 

0

asusman

답변 감사합니다. 이해가 됐습니다.

0

jy3578

안녕하세요?

count(*)와 count(distinct order_id)는 동일한 결과를 내는 쿼리가 아닌지요?

join 후에 order_id는 여러 row에 나타나지만,

상품 A, B에 대해서는 order_id가 1회만 나타나기 때문에 count(*)를 하던 count(distinct order_id)를 하던 동일한 것이 아닌지요?

 

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

0

52

2

쿼리 질문있습니다!!

0

49

2

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

0

90

2

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

0

70

2

cnt/max로 구한 결과의 차이

0

100

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

261

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