문제 링크: http://www.gurubee.net/lecture/2955
내 쿼리
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(*))
'DATABASE > ORACLE' 카테고리의 다른 글
[ORACLE SQL 문제] 경우의 수 구하기 (0) | 2020.03.04 |
---|---|
[ORACLE SQL 문제] 날짜별 모든 코드(빠진 데이터 없이)에 대한 자료 채우기 (0) | 2020.03.04 |
[ORACLE SQL 문제] 여러 테이블 혼합해서 결과 표 도출하기 (0) | 2020.03.03 |
[ORACLE SQL 문제] 연속된 숫자만 그룹핑하기 (0) | 2020.03.03 |
테이블에 foreign key 컬럼 생성하는 법 (0) | 2020.02.20 |
Comments