본문 바로가기
DATABASE/ORACLE

[ORACLE SQL 문제] 일별 누적 접속자 통계 구하기

by sjs_2215 2020. 3. 3.

문제 링크: http://www.gurubee.net/lecture/2955

 

[퀴즈] 일별 누적 접속자 통계 구하기

이번 퀴즈로 배워보는 SQL 시간에는 사용자 접속기록을 분석하여 통계를 구하는 SQL 문제를 풀어본다. 지면 특성상 문제와 정답 그리고 해설이 같이..

www.gurubee.net


내 쿼리

WITH TMP
as (
SELECT '20150801' dt, 1 id FROM dual
UNION ALL SELECT '20150801', 2 FROM dual
UNION ALL SELECT '20150801', 1 FROM dual
UNION ALL SELECT '20150802', 1 FROM dual
UNION ALL SELECT '20150802', 2 FROM dual
UNION ALL SELECT '20150802', 2 FROM dual
UNION ALL SELECT '20150803', 3 FROM dual
UNION ALL SELECT '20150804', 4 FROM dual
UNION ALL SELECT '20150804', 1 FROM dual
UNION ALL SELECT '20150805', 1 FROM dual
)

--
----1. 접속건수 : 접속 기록을 일별로 카운트합니다. 
--SELECT DT, COUNT(*)
--FROM TMP 
--GROUP BY DT
--ORDER BY DT
--;
----2. 접속자수 : 동일 유저는 한번만 카운트 합니다. 
--SELECT DT, COUNT(*)
--FROM (SELECT DISTINCT DT, ID FROM TMP) 
--GROUP BY DT
--ORDER BY DT
--;
--
----3. 누적접속건수 : 현재일자까지의 누적 건수입니다. 
--SELECT DT, COUNT(*)
--, SUM(COUNT(*)) OVER (ORDER BY DT)
--FROM TMP 
--GROUP BY (DT)
--ORDER BY DT
--;
--4. 누적접속자수 : 현재일자까지의 누적 접속자수입니다. 
--SELECT DT, COUNT(*)
--, SUM(COUNT(*)) OVER (ORDER BY DT)
--FROM (SELECT DISTINCT DT, ID FROM TMP) 
--GROUP BY DT
--ORDER BY DT
--;

깨달은 것

 

[내가 생각 못한 것]
1. GROUP BY 하고 COUNT(*)하는 기법!
2. 이중 쿼리(FROM절)에 DISTINCT 칼럼명으로 SELECT 하여 한정 지을 수 있다는 점
3. 누적은 그냥 COUNT(*)에 SUM 붙이면 됨. -> SUM(COUNT(*))

Comments