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
번호 제목 글쓴이 날짜 조회 수
공지 CUBRID 사용자를 위한 DBeaver 도구 출시 안내 admin 2024.04.23 49
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4458
574 큐브리드 R2.1 PHP확장모듈 관련 8 차오이 2010.03.15 12871
573 저장 프로시저 작성법 1 webdoors 2010.03.14 16379
572 mysql에서는 빠른데 큐브리드에서 쿼리를 포문으로 돌려 여러번 실행시 너무 오래 걸립니다. 5 초보 2010.03.13 12918
571 큐브리드 모델링 툴 1 webdoors 2010.03.13 12246
570 CUBRID PHP Extension 이용시 에러 해결 방법?? 3 요한 2010.03.11 12795
569 BIT형 데이터에 대한 where ... IN 쿼리 1 소라게 2010.03.10 10764
568 portable용 cubrid 제작이 가능할까요? 4 letsgolee 2010.03.10 10240
567 두 쿼리의 결과값을 빼려고 합니다. 2 지니보이 2010.03.09 15595
566 큐브리드 설치후, 실행오류 발생 2 챔프 2010.03.08 11230
565 단일 서버에서 복제구현이 가능한지? 3 핸프맨 2010.03.06 10147
564 IIS + PHP5 까지는 연동했습니다. 2 】赤【 2010.03.06 11876
563 뷰 테이블 편집 cascade 오류 1 초보 2010.03.06 11003
562 저장함수에 대하여 1 보리빵 2010.03.04 9854
561 시리얼 업데이트 오류 2 file 초보 2010.03.04 9843
560 큐브리드 데이타베이스 정지후 다시 데이타베이스 시작이 안됩니다. 1 file 초보 2010.03.03 10130
559 쿼리 문제 3 소라게 2010.03.03 9671
558 자동증가 컬럼수정후 자동증가값이 들어가게 하려면? 7 초보 2010.02.27 18072
557 데이타 입력쿼리 실행시 unique 삽입 오류 납니다. 1 file 초보 2010.02.26 13190
556 테이블 복구 1 mydream 2010.02.26 10544
555 mssql -> cubrid 데이터 이전시 문제 4 종이 2010.02.25 22652
Board Pagination Prev 1 ... 167 168 169 170 171 172 173 174 175 176 ... 200 Next
/ 200

Contact Cubrid

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