database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 39192 게시물 읽기
No. 39192
오라클 버전에 따른 group by 오류에 도움 부탁드립니다.
작성자
강옥석(sspkos)
작성일
2011-12-27 13:47
조회수
10,256

도움을 요청드립니다.

수행시간대별 기능별 performence를 실행하는 기능입니다.

아래 내용과 같이 오라클 10g 10.2.0.3.0 버전의 32bit 환경에서는 정상적으로 수행이 됩니다.

Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
 

        SELECT EXEC_TIME,
               CNT,
               SUM_RESP_TIME,
               AVG_RESP_TIME,
               (SELECT COUNT(*)
                  FROM (SELECT DISTINCT TO_CHAR(TO_DATE(SM210M.WORK_ST_DTTM,'YYYYMMDDHH24MISS'),'HH24') HH24,
                               EXEC_CTLR_NAME
                          FROM SM210M
                         WHERE SM210M.INPT_DATA_DESC > ' '
                           AND SM210M.WORK_ST_DTTM BETWEEN '20101001000000' AND '20111231999999'    )  
                  WHERE HH24 = SM210M_1.HH24       ) PGM_CNT,
               (SELECT COUNT(*)
                  FROM (SELECT DISTINCT TO_CHAR(TO_DATE(SM210M.WORK_ST_DTTM,'YYYYMMDDHH24MISS'),'HH24') HH24,
                               USER_ID
                          FROM SM210M
                         WHERE SM210M.INPT_DATA_DESC > ' '
                           AND SM210M.WORK_ST_DTTM BETWEEN '20101001000000' AND '20111231999999'     )  
                  WHERE HH24 = SM210M_1.HH24    ) USER_CNT
          FROM
          (SELECT TO_CHAR(TO_DATE(SM210M.WORK_ST_DTTM,'YYYYMMDDHH24MISS'),'HH24')||':00~'||TRIM(TO_CHAR(TO_NUMBER(TO_CHAR(TO_DATE(SM210M.WORK_ST_DTTM,'YYYYMMDDHH24MISS'),'HH24'))+1,'00'))||':59' EXEC_TIME,
                       COUNT(*)  CNT,
                       SUM(RESP_TIME) SUM_RESP_TIME,
                       ROUND(SUM(RESP_TIME) / COUNT(*),2) AVG_RESP_TIME,
                       TO_CHAR(TO_DATE(SM210M.WORK_ST_DTTM,'YYYYMMDDHH24MISS'),'HH24') HH24
                  FROM SM210M
                 WHERE SM210M.INPT_DATA_DESC > ' '
                   AND SM210M.WORK_ST_DTTM BETWEEN '20101001000000' AND '20111231999999'
                 GROUP BY TO_CHAR(TO_DATE(SM210M.WORK_ST_DTTM,'YYYYMMDDHH24MISS'),'HH24')   ) SM210M_1
          ORDER BY EXEC_TIME

EXEC_TIME             CNT SUM_RESP_TIME AVG_RESP_TIME      PGM_CNT     USER_CNT


------------ ------------ ------------- ------------- ------------ ------------
00:00~01:59          2196         72.11           .03           50            1
01:00~02:59           299         18.55           .06           20            1
08:00~09:59          3751        127.31           .03           63            1
09:00~10:59         10337        725.98           .07          128            2
10:00~11:59         10599       1224.62           .12          148            2
11:00~12:59         10423        490.88           .05          147            4
12:00~13:59          4101        134.01           .03           60            1
13:00~14:59          9270       1440.68           .16          115            1
14:00~15:59         10238       1896.33           .19          120            3
15:00~16:59         10615        517.58           .05          107            1
16:00~17:59          8695        414.82           .05          109            2
17:00~18:59         10003        410.87           .04          120            2
18:00~19:59          1429        103.94           .07           34            1
19:00~20:59           413         42.73            .1           13            2
20:00~21:59          1141         52.33           .05           34            1
21:00~22:59          3851        122.94           .03           55            1
22:00~23:59          3944        204.96           .05           89            1
23:00~24:59          3286         94.56           .03           79            1

18 개의 행이 선택되었습니다.
 

그러나 64bit 아래 환경에서는 동일한 쿼리를 수행했을때 오류가 발생합니다.

원인을 알수가 없어서 도움을 요청드립니다.

       
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
 

           TO_CHAR(TO_DATE(SM210M.WORK_ST_DTTM,'YYYYMMDDHH24MISS'),'HH24') HH24
                           *
26행에 오류:
ORA-00979: GROUP BY 표현식이 아닙니다.

이 글에 대한 댓글이 총 2건 있습니다.

1. 어차피 문자열로 저장된 날짜라면 굳이 날짜 변환할 필요 있나요?
   - 필요한 부분만 잘라서 쓰면 됩니다.
2. 1시간을 왜 더하나요?
   - 시간대만 중복되어 혼란이 가중되며 자료에 대한 신뢰가 떨어집니다.
3. Count 안에서 Distinct 가능합니다.


SELECT SUBSTR(sm210m.work_st_dttm, 9, 2)
       ||':00~'||
       SUBSTR(sm210m.work_st_dttm, 9, 2)
       ||':59' exec_time
     , COUNT(*) cnt
     , SUM(resp_time) sum_resp_time
     , ROUND(SUM(resp_time) / COUNT(*), 2) avg_resp_time
     , SUBSTR(sm210m.work_st_dttm, 9, 2) hh24
     , COUNT(DISTINCT exec_ctlr_name) pgm_cnt
     , COUNT(DISTINCT user_id) user_cnt
  FROM sm210m
 WHERE sm210m.inpt_data_desc > ' '
   AND sm210m.work_st_dttm BETWEEN '20101001000000' AND '20111231999999'
 GROUP BY SUBSTR(sm210m.work_st_dttm, 9, 2)
 ORDER BY exec_time
;

마농(manon94)님이 2011-12-27 15:06에 작성한 댓글입니다.

도움을 주셔서 정말 감사합니다.

간결하게 쿼리 처리를 할 수 있게 되어 정말 마음에 꼭 듭니다.

한수 배웠습니다.

다시한번 더 감사를 드립니다.

그리고 왜 버전에 따라 오류가 나는지는 좀 의아 해 집니다.

수고하십시오!!!

강옥석(sspkos)님이 2011-12-27 19:23에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
39195index 유무에 따른 insert 속도 문의드립니다. [1]
김홍찬
2011-12-27
4156
39194쿼리질문합니다. [1]
이혜미
2011-12-27
4066
39193대량 샘플 데이터 생성하기? [2]
김홍찬
2011-12-27
13156
39192오라클 버전에 따른 group by 오류에 도움 부탁드립니다. [2]
강옥석
2011-12-27
10256
39191검색 속도 관련 조언을 구합니다. [1]
정연우
2011-12-27
5520
39190netstat -an TIME_WAIT 와 성능과의 관계
알라딘
2011-12-27
4712
39188오라클 TO lock을 아시나요? [2]
김나래
2011-12-26
4677
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다