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 52
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4458
3455 Cubrid 11.2 연결시 677 오류. 1 엘L 2022.09.21 124
3454 뷰를 이용한 조인쿼리 시스템 에러 문의 2 플레이어블 2023.01.19 124
3453 드라이버버전 변경방법문의드립니다. 1 file dfdfdd 2023.02.10 124
3452 cubrid 매니저 백업 자동화 추가 비활성 1 제리리 2023.02.15 125
3451 Cubrid 지원 CPU문의 1 B.redsun 2020.12.01 125
3450 오류 메세지 문의 Derived column names are not allowed for simple class specifications. 4 달이맘 2023.12.01 125
3449 CUBRID 엔진 설치 시 중단증상 1 file soso 2021.09.26 125
3448 CUBRID Manager(11.0.0.0001) Python Driver 설치 오류 4 metalk2003 2022.11.10 125
3447 큐브리드 nfs 마운트 폴더 접속 4 익구 2021.12.14 126
3446 list 합수의 결과를 varchar 컬럼에 insert 시 오류 문의 1 file 플레이어블 2023.02.24 126
3445 CUBRIO 삭제 후 재설치 문의입니다. 1 file 미키 2021.09.13 126
3444 DB backup 시 문제가 발생합니다. 4 samsam 2022.04.13 126
3443 저장프로시저 샘플 테스트 에러 Invalid call: it can not return ResultSet. 5 흔색늑대 2022.10.21 126
3442 insert 시 오류 문의 1 steve 2022.12.16 127
3441 ENUM, SET 등의 타입이 저장되는 Dictionary는 어디인가요? 5 새옹지마 2022.06.29 127
3440 필드 추가시 빨랐던 select문 느려지는 이유 3 나라디 2023.02.10 127
3439 큐브리드 매니저 접속 이 안됩니다. 확인 요청 드립니다. 1 뿡이 2023.04.28 128
3438 HA 실행시 발생하는 에러 1 file Philip Park 2020.10.15 128
3437 오브젝트들의 비활성화 기능은 없는 건가요? 메뉴얼 보니 나오지를 안아서요? 2 덴드로비움 2020.10.29 128
3436 마이그래이션 시 발생 에러 1 박종원 2019.04.15 129
Board Pagination Prev 1 ... 23 24 25 26 27 28 29 30 31 32 ... 200 Next
/ 200

Contact Cubrid

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