시간 계산 관련 문의 드립니다. 0 3 5,457

by DDCC [SQL Query] date time 시간 시간계산 통계 [2010.09.14 18:27:50]



초과근무 관련 통계 query 를 작성 중에 있습니다.
한참 버벅거리다가 고수님들 도움 받고자 글씁니다.

아래와 같은 테이블이 있습니다.

user_id work_hour
0101  4
0101  2.01
0101  1.59
0102  3.11
0102  4.2
0102  4.13
0103  2.48
0103  3.37
0104  1.03
0104  2.37

- user_id : 사용자 ID
- work_hour : 근무시간.  소숫점 앞자리  시간, 소숫점 뒷자리 분
    ( 예: 4.2   = 4시간 20분, 1.03 = 1시간 3분 )

이걸 각 사용자 별로 통계를 추출해야 합니다.
소숫점 뒷자리는 mm(분)이니깐 합이 60일 때 1시간으로 더해야 합니다.

나름 버벅거리면서 작성한 쿼리가.

with emp as
(
    select '0101' user_id, '4' work_hour    from dual union all
    select '0101' user_id, '2.01' work_hour from dual union all
    select '0101' user_id, '1.59' work_hour from dual union all
    select '0102' user_id, '3.11' work_hour from dual union all
    select '0102' user_id, '4.2' work_hour  from dual union all
    select '0102' user_id, '4.13' work_hour from dual union all
    select '0103' user_id, '2.48' work_hour from dual union all
    select '0103' user_id, '3.37' work_hour from dual union all
    select '0104' user_id, '1.03' work_hour from dual union all
    select '0104' user_id, '2.37' work_hour from dual
)
select user_id
, work_hour
, TO_NUMBER(DECODE(INSTR(work_hour,'.') /* 시간에 '.' 있는지 확인 */
    ,0,work_hour
    ,SUBSTR(work_hour,0,INSTR(work_hour,'.')-1))) as hh
, TO_NUMBER(DECODE(INSTR(work_hour,'.') /* 시간에 '.' 있는지 확인 */
    ,0,'00'
    ,rpad(SUBSTR(work_hour,INSTR(work_hour,'.')+1),2,'0'))) as mm
  from emp
/
이 것으로 work_hour 를 시간과 분으로 분리 하였습니다.

이 것을 아래와 같이 계산해야 합니다.

1. 위 결과물에서 hh (시간)은 sum하여 xx시간 으로 출력
2. mm(분)을 모두 sum하여  xx시간 xx분 으로 출력
3. 최종적으로 위 1과 2를 합하여 xx시간 xx분으로 출력

고수님들의 도움 부탁드립니다.



by 마농 [2010.09.14 18:52:28]
SELECT user_id
-- 1. 날짜 변환을 이용하여 계산
, TO_CHAR(TO_DATE(
SUM(TO_CHAR(TO_DATE(TO_CHAR(work_hour, 'fm00.00'), 'hh24.mi'),'sssss'))
,'sssss'),'hh24"시간" mi"분"') work_hour_1
-- 2. 수식으로 계산
, LPAD(SUM(FLOOR(work_hour)) + FLOOR(SUM(MOD(work_hour, 1))*100/60), 2, '0') || '시간 '
|| LPAD(MOD(SUM(MOD(work_hour, 1))*100,60), 2, '0') || '분' work_hour_2
FROM emp
GROUP BY user_id
ORDER BY user_id
;

by DDCC [2010.09.14 19:18:49]
역시 마농님입니다. 감사합니다. 복받으세요.

by 똘똘마리 [2010.09.15 11:51:32]
수식으로 계산 부분은 예술이네요.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입