GROUP BY
: 테이블의 레코드를 그룹핑하여 그룹별로 다양한 정보를 계산할때 사용
AGGREGATE
: 그룹핑 후 그룹별로 계산할 내용을 결정할때 사용됨
SELECT
channel,
COUNT(1) AS session_count,
COUNT(DISTINCT useId) AS user_count
FROM raw_data.user_session_channel
GROUP BY 1
ORDER BY 2 DESC;
여기서의 GROUP BY 1
을 GROUP BY channel
이라해도 같은 의미
SELECT
userId,
COUNT(1) AS count
FROM raw_data_session_channel
GROUP BY 1
ORDER BY 2 DESC
LIMIT 1;
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;
여기서의 조인은 inner join에 해당한다.
양쪽에 세션 아이디가 같은것만 두고 나머지는 버린다.
TO_CHAR: 문자열 타입이 아닌 인자를 필드로 받아서 문자열 타입으로 반환
DATE_TRUNC: 문자열이 아니라 timestamp 타입으로 반환