Background Image

FORUM

2010.02.23 20:10

group by 오류

조회 수 12513 추천 수 0 댓글 3
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
select a.bo_table, a.bo_subject, bo_image_head from board a left join board_new b on a.bo_table = b.bo_table
where a.ca_id = '103010' group by a.bo_table order by bn_datetime desc for orderby_num() between 1 and 4 

위와 같은 쿼리가 mysql 에서는 되지만 cubrid 최신 버전에서는 안됩니다.

목적은 bo_table 컬럼만 중복제거 하려는 목적입니다

오류 메세지는 다음과 같습니다.

시멘틱: a.bo_subject은(는) 단일 값이 아닙니다. aggregate 질의어 내에 나타난 속성은 "group by" 절 내에 나타나야 합니다.

어떻게 해야하죠?
  • ?
    남재우 2010.02.23 20:45
    안녕하세요.
    CUBRID에서는 group by 사용시 group by 에 영향을 줄 수 있는 모든 필드가 group by 에 명시되어야 합니다. 따라서 select 절에 명시된 필드가 다 들어가야 합니다. 말씀하신 것처럼 bo_table 만 unique 하게 하려면 다른 필드들에 대하여 적절한 원칙을 가지고 질의가 되어야 할 것입니다. 즉, bo_table 이 1인 것에 대하여 bo_subejct 가 1과 2의 값을 가진다면 이중에 하나만 결과로 나와야 하는데 이렇게 하시려면 서브 질의를 이용하거나, 질의 조정이 꽤 필요합니다. 더군다나 정렬은 select 절에 없는 다른 필드를 이용해 정렬이 되고 있으니 조금 시간을 가지고 분석해 봐야 할 것 같습니다.
    분석해 보고 적절한 질의를 올려드리도록 하겠습니다.



  • ?
    초보 2010.02.23 20:51
    답변 감사합니다 질의 올려주시길 부탁드립니다 감사합니다~
  • ?
    남재우 2010.02.24 19:45

    안녕하세요.
    잘 아시겠지만, 혹시나 하여 일반적인 group by 에 대하여 설명을 먼저 드리겠습니다.
    board 테이블에 값이 아래와 같이 있는 경우(순번은 그냥 레코드 순서입니다),
    순번      bo_table      bo_subject
      1       'table1'      'subject1'
      2       'table1'      'subject2'
      3       'table2'      'subject1'
    bo_table이 'table1' 인 경우 bo_subject 는 서로 다른 두개의 값을 가집니다. 이 경우 일반적으로 group by 를 하게되면 질의는 select bo_table,bo_subject from ... group by bo_table,bo_subject 와 같이 대상이 되는 필드가 모드 group by 절에 명시되어야 합니다. 그리고 그 결과는 아래와 같습니다.
    bo_table      bo_subject
    'table1'      'subject1'
    'table1'      'subject2'
    'table2'      'subject1'

    그런데 질문하신 내용이 위와 같은 결과가 아니라 아래와 같은 결과라면 이건 간단히 처리가 않되며, 질의를 꽤 조정해야 합니다. 참고로 bo_subject 의 결과는 'subject1'이 나올지 'subject2'가 나올지는 보장할 수 없습니다.
    bo_table      bo_subject
    'table1'      'subject1'
    'table2'      'subject1'

    정확한 스키마를 알 수 없지만 몇가지 가정을 하고 아래와 같이 정리해봤습니다.
    각 필드는 문자열로 가정했고, order by 에 사용된 필드가 a 테이블의 것이며, 조인되는 두개테이블은 1:1이거나 1:0 을 가정했습니다. 그렇지 않으면 조인에 의해 결과가 늘어나게 되어 group by 처리에 문제가 발생합니다.
    그래서 조정된 질의는 아래와 같습니다. 조건절에 서브질의를 이용한 조건이 들어갔으며 서브질의에서 rownum 을 이용하여 하나의 결과만 가져오도록 하였습니다.
    결과는 원하는대로 나오겠지만 서브질의를 사용함으로써 group by와 orderby_num()이 없는 상태에서의 결과 개수만큼 서브질의가 수행되므로 성능은 좋지 않습니다.
    select a.bo_table, a.bo_subject, bo_image_head
    from board a left join board_new b on a.bo_table = b.bo_table
    where a.ca_id = '103010'
      and (a.bo_subject, a.bn_datetime)
            = (select a.bo_subject, a.bn_datetime
                    from board ab
                    where ab.bo_table = a.bo_table
                      and rownum = 1
            )
    group by a.bo_table, a.bo_subject, bo_image_head, a.bn_datetime
    order by bn_datetime desc for orderby_num() between 1 and 4


List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4284
3436 큐브리드 매니저에서 오류 5 file 초보 2010.02.10 10353
3435 // 를 사용하고 싶습니다. 1 죽통군 2010.02.10 9583
3434 리눅스 설치 확인 부탁 드립니다. 1 Philip Park 2010.02.12 10483
3433 컴포지션 관련해서 문의 드립니다. 3 file 野花 2010.02.12 12031
3432 설치 완료후 phpcubAdmin 에서 페이지 열기가 안됩니다. 2 마루정 2010.02.12 10037
3431 restoredb 이용한 복구가 제대로 되지 않아요. 4 럭키늘보 2010.02.18 13006
3430 리눅스상에서 백업파일의 Backup Time을 알수있는 방법이 있나요? 1 럭키늘보 2010.02.19 10015
3429 timestamp 필드 데이터를 다시 timestamp로 변환하기 1 byblog 2010.02.20 12650
3428 테이블명을 한글로 할 수는 없나요? 3 유니콘 2010.02.22 13819
» group by 오류 3 초보 2010.02.23 12513
3426 저장프로시저 함수-loadjava 3 쪼로롱 2010.02.23 15671
3425 555번 한글테이블 글 올린 사람입니다 (화면캡쳐함) 1 유니콘 2010.02.23 11763
3424 한글메세지 출력 방법에 대해서.. 4 모야 2010.02.25 12525
3423 Like 문이 의도하지 않은 결과값을 반환합니다. 3 이진혁 2010.02.25 12531
3422 mssql -> cubrid 데이터 이전시 문제 4 종이 2010.02.25 22651
3421 테이블 복구 1 mydream 2010.02.26 10544
3420 데이타 입력쿼리 실행시 unique 삽입 오류 납니다. 1 file 초보 2010.02.26 13184
3419 자동증가 컬럼수정후 자동증가값이 들어가게 하려면? 7 초보 2010.02.27 18062
3418 쿼리 문제 3 소라게 2010.03.03 9671
3417 큐브리드 데이타베이스 정지후 다시 데이타베이스 시작이 안됩니다. 1 file 초보 2010.03.03 10130
Board Pagination Prev 1 ... 23 24 25 26 27 28 29 30 31 32 ... 199 Next
/ 199

Contact Cubrid

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