5주차 고급 SQL 활용
데이터 웨어하우스와 SQL 기본에 대해 배우고 이를 바탕으로 데이터 분석에 대해 학습 (3)
학습 주제: GROUP BY와 Aggregate 함수
보통 테이블의 레코드를 그룹핑하여 그룹별로 다양한 정보를 계산한다.
이때 먼저 그룹핑을 할 필드를 결정해 GROUP BY로 지정하고,
다음으로 그룹별로 계산할 내용을 결정한다. 이때 Aggregate 함수(COUNT, SUM, AVG, MIN, MAX, LISTAGG, ...)를 사용한다. 보통 필드 이름을 지정하는 것이 일반적이다. (실제로 해보면 왜 권장되는지 이해된다.)
몇 가지 코드를 직접 작성해 보자.
1. 가장 많이 사용된 채널은 무엇인가?
SELECT
channel,
COUNT(1) AS session_count,
COUNT(DISTINCT userId) AS user_count
FROM raw_data.user_session_channel
GROUP BY 1
ORDER BY 2 DESC;
2. 가장 많은 세션을 만들어낸 사용자 ID는 무엇인가?
SELECT
userId,
COUNT(1) AS count
FROM raw_data.user_session_channel
GROUP BY 1
ORDER BY 2 DESC
LIMIT 1;
3. 월별 유니크한 사용자 수(MAU - Monthly Active User)
SELECT
TO_CHAR(A.ts, 'YYYY-MM') AS month,
COUNT(DISTINCT B.userid) AS mau
FROM raw_data.session_timestamp A
JOIN raw_data.user_session_channel B ON A.sessionid = B.sessionid
GROUP BY 1
ORDER BY 1 DESC;
4. 월별 채널별 유니크한 사용자 수
SELECT
TO_CHAR(A.ts, 'YYYY-MM') AS month,
channel,
COUNT(DISTINCT B.userid) AS mau
FROM raw_data.session_timestamp A
JOIN raw_data.user_session_channel B ON A.sessionid = B.sessionid
GROUP BY 1, 2
ORDER BY 1 DESC, 2;
공부하며 어려웠던 내용
JOIN을 자유자재로 쓰지 못하는 것 같다는 느낌이 들어서, 프로그래머스에서 JOIN 문제들로 연습을 좀 해봐야겠다는 생각이 들었다.
'SQL' 카테고리의 다른 글
트랜잭션과 기타 고급 SQL 문법 (1) | 2024.03.22 |
---|---|
JOIN 심화 학습 (0) | 2024.03.21 |
Redshift, 팀워크 특강 (0) | 2024.03.19 |
데이터 웨어하우스, AWS, Redshift (0) | 2024.03.18 |
NBA Players 실전 데이터 분석 (2) | 2024.03.08 |