Background Image

FORUM

조회 수 7235 추천 수 0 댓글 2
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
OS
Window7 64bit
CUBRID Ver.
[cubrid_rel] 수행 결과
CUBRID TOOL Ver.
[도움말]-[버전정보] 확인
응용 환경(API)
java 입력

* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 재현 가능한 Source와 SQL
관련 테이블(인덱스, 키정보 포함) 정보 CUBRID 홈 디렉토리 아래 log 디렉토리 압축


-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------

(NULL) 값이 포함된 테이블에서  AVG 나 SUM값을 구할때
필드를 13개 이상 계산시 결과로 Null값만 출력이 됩니다.. 예를들어 필드명이 hour1~hour24가 있을 때

SELECT AVG(hour1+hour2+hour3+hour4 +hour5 +hour6+hour7+hour8+hour9+hour10 +hour11 +hour12+hour13+hour14+hour15+hour16 +hour17 +hour18+hour19+hour20+hour21+hour22 +hour23 +hour24) from table

로 계산하면 Null 값이 나옵니다..

근데 1~12 혹은 13~24까지 더하면 값이나오구요..

원래 이런건지 오류인건지..

해결방법 좀 부탁드립니다.


  • ?
    이용미 2015.04.10 20:23
    안녕하세요.

    아래와 같은 방법으로 CUBRID 9.3.1.0005를 이용하여 사내에서 확인 시, 모두 NULL로 출력되었으며 컬럼 값에 NULL이 들어있는 경우 집계/분석 함수 수행 시 NULL값이 출력되는 것이 맞습니다.
    SUM의 경우는 NULL 값이 있는 경우, NVL 또는 IFNULL을 이용하시어 사용해 주시면 됩니다.

    만약 다른 버전을 이용하여 확인하신 사항이라면 정확한 버전을 알려주세요.
    csql> insert into tmp(col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11, col12, col13, col14, col15, col16, col17, col18, col19, col20, col21, col22, col23, col24) values(NULL, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, NULL);
    1 row affected. (0.000905 sec) Committed.

    1 command(s) successfully processed.

    csql>select sum(col1+col2+col3+col4+col5+col6+col7+col8+col9+col10+col11+col12+col13+col14+col15+col16+col17+col18+col19+col20+col21+col22+col23+col24) as sum_total,
    csql> sum(col1+col2+col3+col4+col5+col6+col7+col8+col9+col10+col11+col12) as sum_1to12, sum(col13+col14+col15+col16+col17+col18+col19+col20+col21+col22+col23+col24) as sum_13to24 from tmp;


    == <Result of SELECT Command in Line 2> ===

       sum_total    sum_1to12   sum_13to24
    ======================================
            NULL         NULL         NULL

     rows selected. (1.623000 sec) Committed.

     command(s) successfully processed.

    csql> select avg(col1+col2+col3+col4+col5+col6+col7+col8+col9+col10+col11+col12+col13+col14+col15+col16+col17+col18+col19+col20+col21+col22+col23+col24) as avg_total,
    csql> avg(col1+col2+col3+col4+col5+col6+col7+col8+col9+col10+col11+col12) as avg_1to12, avg(col13+col14+col15+col16+col17+col18+col19+col20+col21+col22+col23+col24) as avg_13to24 from tmp;

    == <Result of SELECT Command in Line 2> ===

                    avg_total                 avg_1to12                avg_13to24
    =============================================================================
                         NULL                      NULL                      NULL

     rows selected. (0.468000 sec) Committed.

     command(s) successfully processed.

    감사합니다.
  • ?
    cgkang 2015.04.10 21:31

    참고로 덧붙입니다.

    SQL에서 NULL값과 숫자값의 연산은 항상 NULL이됩니다.

    NULL + 1 = NULL

    이렇게 되기 때문에 여러개 컬럼을 더하기 할때 값중 하나라도 null이 포함되어 있으면 전체 결과는 NULL이 됩니다.


    SUM, AVG를 계산할때는 null값을 제외하고 계산하게 됩니다.

    예를 들어

    create table tmp(a int);

    insert into tmp values(1);

    insert into tmp values(null);

    이렇게 2건이 들어있다고 가정하면

    select sum(a) from tmp -> null값 제외한 합계 : 1

    select avg(a) from tmp -> null값 제외한 평균 : 1


    ifnull(a,0)와 같이 null을 0으로 바꾸는 경우 sum을 계산할때는 0을 더해도 결과가 달라지지는 않지만,

    avg계산할때는 결과가 달라지게 됩니다.

    select avg(ifnull(a,0)) from tmp 이렇게 할 경우 null이 아닌 튜플이 2개가 되고 합은 1이기 때문에 avg결과는 0.5가 됩니다.




List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 CUBRID 사용자를 위한 DBeaver 도구 출시 안내 admin 2024.04.23 55
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4461
1935 ODBC로 연결을 했는데 자꾸 E_FAIL이 뜹니다.제발 답변좀 달아주세요!!개인이라고 신경 안써주시나? 1 JKwang2 2015.03.12 9193
1934 외부 개체에 트랩 가능한 오류(C0000005)가 발생했습니다. 스크립트를 계속 실행할 수 없습니다. 1 JKwang2 2015.03.12 11720
1933 DB와 BROKER 분리 설정 방법 1 땡글이와밍크 2015.03.26 6171
1932 9.3 버전 원격 DB 접근 방법 문의 1 secret 수진이2 2015.03.27 277
1931 자동백업 문의 1 file 완초 2015.03.27 4241
1930 CUBRID와 관련된 프로세스 관련 문의드립니다. 1 secret 질의응답요청 2015.03.28 10
1929 오라클의 LAG (위 Row 값), LEAD (아래 Row 값) 가져올수 있는 쿼리 대체할만한것이 있나요? 2 거만고양이 2015.03.29 12419
1928 자동백업시 폴더까지는 생성이 되는데 백업파일이 생성이 않됩니다. 1 secret 블랙 2015.03.30 8
1927 0으로 나눌수가 없는 경우.. 처리를 위해서 디코더나 case를 사용해서 써봤는데 1 거만고양이 2015.04.01 4253
1926 JDBC(MySQL) 에서 JDBC로 마이그레이션 3 file 날아라수호야 2015.04.02 6200
1925 네트워크 드라이브에 데이터베이스 생성하기 1 꺆끾뗚 2015.04.03 5715
1924 엑셀파일로 데이터 입력 시 오류 1 secret 로우121 2015.04.04 7
1923 IN 쿼리 사용시 질의실행계획 비용 관련 8 종이 2015.04.07 6695
1922 Warning: Error: CAS, -10012, Invalid cursor position in ~ 6 완초 2015.04.08 6365
1921 Mac OS에서 cubrid manager 사용 문의 1 file 크림빵돌이 2015.04.09 6874
1920 데이터베이스 복구가 되지 않습니다. 1 CUCUCUCU 2015.04.09 7250
» 13개 이상 AVG 혹은 SUM 사용 시 결과로 Null 값만 나옵니다. 2 oiuy 2015.04.10 7235
1918 트랜젝션 처리에 대해 1 kkndo2 2015.04.13 8337
1917 MS-SQL의 연결된 서버와 같은 기능은 없나요? 1 CUCUCUCU 2015.04.14 6038
1916 큐브리드 매니저 실행 시 무반응 3 코버스 2015.04.15 10124
Board Pagination Prev 1 ... 99 100 101 102 103 104 105 106 107 108 ... 200 Next
/ 200

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales