SELECT
LEFT(ts, 7) AS mon, -- left를 쓰는 순간 ts가 문자열로 바뀜 7개 빼면 yyyy-mm 가져옴
COUNT(1) AS session_count
FROM raw_data.session_timestamp
GROUP BY 1 -- GROUP BY mon, GROUP BY LEFT(ts, 7)
ORDER BY 1;
-> 앞서 설명한 raw_data.session_timestamp raw_data.user_session_channel 테이블들을 사용해서 다음을 계산하는 SQL을 만들어 보자
SELECT
channel,
COUNT(1) AS session_count,
COUNT(DISTINCT userId) AS user_count
FROM raw_data.user_session_channel
GROUP BY 1 -- GROUP BY channel 숫자를 쓰는 것을 선호
ORDER BY 2 DESC; -- ORDER BY session_count DESC
SELECT
userId,
COUNT(1) AS count
FROM raw_data.user_session_channel
GROUP BY 1 -- GROUP BY userId
ORDER BY 2 DESC -- ORDER BY count DESC
LIMIT 1;
--내부 조인(inner join)
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;
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;
--충돌을 막기 위해 summary 앞에 영문이름 넣음
DROP TABLE IF EXISTS adhoc.keeyong_session_summary;
CREATE TABLE adhoc.keeyong_session_summary AS
SELECT B.*, A.ts FROM raw_data.session_timestamp A
JOIN raw_data.user_session_channel B ON A.sessionid = B.sessionid;
SELECT
TO_CHAR(ts, 'YYYY-MM') AS month,
COUNT(DISTINCT userid) AS mau
FROM adhoc.keeyong_session_summary
GROUP BY 1
ORDER BY 1 DESC;
SELECT COUNT(1)
FROM adhoc.keeyong_session_summary;
-- 문제가 없으면 동일해야 함
SELECT COUNT(1)
FROM (
SELECT DISTINCT userId, sessionId, ts, channel
FROM adhoc.keeyong_session_summary
);
-- CTE : FROM 안에 넣지 않고 외부로 빼서 사용 (재사용 가능)
With ds AS (
SELECT DISTINCT userId, sessionId, ts, channel
FROM adhoc.keeyong_session_summary
)
SELECT COUNT(1)
FROM ds;
SELECT MIN(ts), MAX(ts)
FROM adhoc.keeyong_session_summary;
-- 1보다 크면 중복이 있다
SELECT sessionId, COUNT(1)
FROM adhoc.keeyong_session_summary
GROUP BY 1
ORDER BY 2 DESC
LIMIT 1;
SELECT
COUNT(CASE WHEN sessionId is NULL THEN 1 END) sessionid_null_count,
COUNT(CASE WHEN userId is NULL THEN 1 END) userid_null_count,
COUNT(CASE WHEN ts is NULL THEN 1 END) ts_null_count,
COUNT(CASE WHEN channel is NULL THEN 1 END) channel_null_count
FROM adhoc.keeyong_session_summary;