WITH T AS (
SELECT TO_DATE('2016-06-22 00:24:03','YYYY-MM-DD HH24:MI:SS') AS DT , 100 AS NUM FROM DUAL UNION ALL
SELECT TO_DATE('2016-06-22 00:10:51','YYYY-MM-DD HH24:MI:SS'), 110 FROM DUAL UNION ALL
SELECT TO_DATE('2016-06-22 00:19:29','YYYY-MM-DD HH24:MI:SS'), 120 FROM DUAL UNION ALL
SELECT TO_DATE('2016-06-22 00:42:58','YYYY-MM-DD HH24:MI:SS'), 130 FROM DUAL UNION ALL
SELECT TO_DATE('2016-06-22 00:42:58','YYYY-MM-DD HH24:MI:SS'), 140 FROM DUAL UNION ALL
SELECT TO_DATE('2016-06-22 00:42:58','YYYY-MM-DD HH24:MI:SS'), 150 FROM DUAL UNION ALL
SELECT TO_DATE('2016-06-22 00:42:58','YYYY-MM-DD HH24:MI:SS'), 200 FROM DUAL UNION ALL
SELECT TO_DATE('2016-06-22 00:42:58','YYYY-MM-DD HH24:MI:SS'), 210 FROM DUAL UNION ALL
SELECT TO_DATE('2016-06-22 00:42:58','YYYY-MM-DD HH24:MI:SS'), 220 FROM DUAL UNION ALL
SELECT TO_DATE('2016-06-22 00:42:58','YYYY-MM-DD HH24:MI:SS'), 230 FROM DUAL UNION ALL
SELECT TO_DATE('2016-06-22 00:42:58','YYYY-MM-DD HH24:MI:SS'), 240 FROM DUAL UNION ALL
SELECT TO_DATE('2016-06-22 00:42:58','YYYY-MM-DD HH24:MI:SS'), 250 FROM DUAL UNION ALL
SELECT TO_DATE('2016-06-22 00:42:58','YYYY-MM-DD HH24:MI:SS'), 260 FROM DUAL UNION ALL
SELECT TO_DATE('2016-06-22 00:48:04','YYYY-MM-DD HH24:MI:SS'), 270 FROM DUAL
)
SELECT * FROM T ;
위와 같은 데이터가 있을 때 시간대별로 NUM 필드의 정보를 연산하여 표시하고 싶습니다.
아래와 같이 데이터가 출력이 되면 됩니다.
시간정보 // 그룹핑 기준정보 // 건수
2016-06-22 00 // 1~100 // 1 건
2016-06-22 00 // 101~200 // 6 건
2016-06-22 00 // 201~250 // 5 건
2016-06-22 00 // 251 ~ // 2 건
1~100, 101~200 등과같은 그룹핑 기준정보는 고정입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | SELECT MIN (dt) "시간정보" , DECODE(num, 1, '1~100' , 2, '101~200' , 3, '201~250' , '251~' ) "그룹핑 기준정보" , COUNT (*) || '건' "건수" FROM ( SELECT TO_CHAR(dt, 'yyyy-mm-dd' ) dt , CASE WHEN num <= 100 THEN 1 WHEN num <= 200 THEN 2 WHEN num <= 250 THEN 3 ELSE 4 END num FROM T ) GROUP BY num ORDER BY num |