인프런 커뮤니티 질문&답변

bluebamus님의 프로필 이미지
bluebamus

작성한 질문수

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

사용자별 월별 세션 접속 횟수의 구간별 분포 집계 SQL로 구하기 - 01

group by에 대해 질문 드립니다.

작성

·

236

·

수정됨

0

사용자별 월별 세션 접속 횟수의 구간별 분포 집계 SQL로 구하기 - 02

위 과정을 학습하고 있습니다

select month
	,case when monthly_user_cnt = 1 then '0_only_first_session'
		  when monthly_user_cnt between 2 and 3 then '2_between_3'
		  when monthly_user_cnt between 4 and 8 then '4_between_8'
		  when monthly_user_cnt between 9 and 14 then '9_between_14'
		  when monthly_user_cnt between 15 and 25 then '15_between_25'
		  when monthly_user_cnt >= 26 then 'over_26' end as gubun
	, count(*) as user_cnt 
from temp_01 
group by month, 
		 case when monthly_user_cnt = 1 then '0_only_first_session'
		  when monthly_user_cnt between 2 and 3 then '2_between_3'
		  when monthly_user_cnt between 4 and 8 then '4_between_8'
		  when monthly_user_cnt between 9 and 14 then '9_between_14'
		  when monthly_user_cnt between 15 and 25 then '15_between_25'
		  when monthly_user_cnt >= 26 then 'over_26' end
order by 1, 2;

위 쿼리에서 group by 항목이 이해가 잘 안되서 질문 드립니다.

위와 같이 그룹을 지으면

  1. 일자 + monthly_user_cnt 의 조합으로 그룹들이 만들어짐

  2. select에서

select month
	,case when monthly_user_cnt = 1 then '0_only_first_session'
		  when monthly_user_cnt between 2 and 3 then '2_between_3'
		  when monthly_user_cnt between 4 and 8 then '4_between_8'
		  when monthly_user_cnt between 9 and 14 then '9_between_14'
		  when monthly_user_cnt between 15 and 25 then '15_between_25'
		  when monthly_user_cnt >= 26 then 'over_26' end as gubun

위 쿼리로 넘어온 데이터(아직 컬럼으로 만들어지지 않은채 각 그룹별로 정의되어 넘어온 데이터)에 컬럼명을 붙여줌

위와 같은 동작을 하는게 맞는지요?

제가 이해하는게 맞는지 알고 싶습니다.

 

답변 1

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

아래는 컬럼명이 아니라 컬럼값을 변화 시키는 것입니다.

case when monthly_user_cnt = 1 then '0_only_first_session'

when monthly_user_cnt between 2 and 3 then '2_between_3'

when monthly_user_cnt between 4 and 8 then '4_between_8'

when monthly_user_cnt between 9 and 14 then '9_between_14'

when monthly_user_cnt between 15 and 25 then '15_between_25'

when monthly_user_cnt >= 26 then 'over_26' end as gubun

 

그러니까 monthly_user_cnt값이 1 이면 값을 문자열 값이 '0_only_first_session' 으로 변경 시키는 것입니다.

예를 들어 monthly_user_cnt 값이 아래와 같이 있다고 할때

1 -> '0_only_first_session'

2 -> '2_between_3'

3-> '2_between_3'

4-> '4_between_8'

5->'4_between_8'

과 같이 컬럼값을 변경하는 것입니다. 그러면 해당 컬럼값 별로 group by한 count 건수는 '0_only_first_session' 은 1건, '2_between_3'는 2건, '4_between_8'은 2건과 같이 나오게 됩니다. group by 레벨을 case when을 사용해서 업무적인 요건에 맞춰 자유자재로 변경할 수 있습니다.

감사합니다.

bluebamus님의 프로필 이미지
bluebamus

작성한 질문수

질문하기