[Oracle] 주별 통계 쿼리문 > db

본문 바로가기

db

[Oracle] 주별 통계 쿼리문

페이지 정보

작성자 서방님 댓글 0건 조회 30회 작성일 13-03-08 08:57

본문

floor( ((to_number(to_char(trunc(d,'mon'),'d'))-1)

+ to_number(to_char(d,'dd'))-1) / 7 ) +1

를 함수처럼 사용하시면 문제 없을거 같은데..

 

위에서 d 에 해당하는 곳에(두군데 있죠..)

원하는 날짜를 주면 (date 타입의)

위 식은 그 날짜가 해당월의 몇번째 주인지를 계산해 줍니다.

이렇게 생각하시고 count가 됐건 뭐가 됐건

aggregate function을 적용하면 되지 않을까요..

==============================================

아래 쿼리를 설명드리죠
우선 수치가 부적합하다는 에러는
start_time 컬럼 타입이 date인지 확인바랍니다.

where 절은 그대로 이해하시면 되고
group by 절 내용을 보면(안쪽부터 바깥으로 해석해 보죠)
-날짜를 2003년2월1일로 변경했음-
이것은 해당 주를 하나의 값으로 통일한 후
이를 broup by 하기 위함입니다.

1. to_date('2003-02-01', 'yyyy-mm-dd')는 '2003-02-01' 텍스트를 da
te타입으로 변경하는 것이죠
2. 그런 다음 to_char(to_date('2003-02-01', 'yyyy-mm-dd'),'d')은 날
짜 2003년2월1일이 무슨 요일인지를 숫자로 표기하는 것입니다.
==> 일:1, 월:2 ,,, 토:7
그러므로 2003년2월1일은 토요일이니 값이 7이되겠네요
-- 맨뒤의 'd'를 'dd'로 쓰셨더군요 변경하시기 바랍니다 --
3. 2번을 수행한 값에 2003년2월의 날짜 값을 더합니다. 그리고 1을 빼주죠(이건 트릭입니다.)

20030201 : 7+1-1 = 7
20030202 : 7+2-1 = 8
20030203 : 7+3-1 = 9
20030204 : 7+4-1 = 10
.
20030210 : 7+10-1 = 16
.
이값을 7로 나눕니다. (x는 소수점 값)
20030201 : 7/7 = 1
20030202 : 8/7 = 1.x
20030203 : 9/7 = 1.x
20030204 : 10/7=1.x
.
20030210 : 16/7=2.x
.

다음에 ceil함수를 이용하여 값들을 올림하지요
20030201 : ceil(1) = 1
20030202 : ceil(1.x) = 2
20030203 : ceil(1.x) = 2
20030204 : ceil(1.x) = 2
.
20030210 : ceil(2.x) = 3
.

이쯤 되면 이해가 가실거라 생각됩니다.

20030201은 첫째주이므로 값이 1이고
20030202 ~ 20030208은 두째주이므로 값이 2이고
...

그러므로 이 값으로 group by를 하면 주별 통계를 구할 수 있는 거지요
충분히 이해가 되셨을 것이라 봅니다.
좋은 하루 되세요
good luck!!!

where to_char(start_time, 'yyyy-mm') = '2003-02'
group by ceil((to_char(to_date('2003-02-01', 'yyyy-mm-dd'),
'dd') + to_char(start_time, 'dd') - 1)/ 7)

============================================================
========

밑에 보니 sum(1)문제 답변 달아주셨군요...고맙습니다...

아래는 주간별 통계를 내는 쿼리입니다..
분석을 하긴 했는데 where 이후 부터는 이해가 잘 안돼네요...

에러도 where 절 이후에서 나고요..
흐흠 쿼리 한문장으로 반나절을 해메고 있어요..음 얼렁 오라클이든 시퀄이든

디비를 열심히 공부해야 겠다는 생각이 듭니다..후후 ~~

제글에 답변주신 분이나 아래 쿼리문제에러 난곳 원인을 아시는 분은 답변좀 달

아주심 고맙겠습니다..
아래는 주간별 통계 쿼리문입니다..
select min(to_char(start_time, 'yyyy-mm-dd'))|| '~' || max(t
o_char(start_time, 'yyyy-mm-dd')),
count(*), sum(sal)
from 테이블명
이밑에서 에러가 나네요...수치가 부적합하다고 나옵니다.
.
몇가지 생각에 여러번 수정해 보았는데 그대로 입니다..
to_char(start_time, 'dd') - 1)/ 7) 이문장에서 날짜값을 받아서 1빼구 7로 나누

것에서 char 라서 빼고 나누고 못하는것 같기도 한데 잘모르겠어요

혹 답변주신분이시라면 쿼리 간단하게 해석좀 해주세요..이제 사회생활

시작한 초보입니다..꼭 도움을 주세요 감사합니다..

where to_char(start_time, 'yyyy-mm') = '2002-02'
group by ceil((to_char(to_date('2002-02-01', 'yyyy-mm-dd'),
'd') + to_char(start_time, 'dd') - 1)/ 7)

댓글목록

등록된 댓글이 없습니다.

Total 447건 1 페이지
게시물 검색

회원로그인

접속자집계

오늘
215
어제
282
최대
592
전체
37,313

그누보드5
Copyright © seobangnim.com All rights reserved.
자바스크립트를 활성화 하세요![ 브라우저에서 자바스크립트를 활성화하는 방법 ]