* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
|
Linux 64bit |
|
9.1 |
|
10.1 |
|
CUBRID 매니저 |
* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 | 재현 가능한 Source와 SQL |
관련 테이블(인덱스, 키정보 포함) 정보 | CUBRID 홈 디렉토리 아래 log 디렉토리 압축 |
-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
아래와 같은 테이블(table1) 데이터로부터
year | bsns_cd | sn | ano | bno | sum |
---|---|---|---|---|---|
2021 | KN07000 | 1 | RRN_0000000324 | RMN_0000000493 | 464000000 |
2021 | KN07000 | 1 | RRN_0000000324 | RMN_0000000493 | 464000000 |
2021 | KN07000 | 1 | RRN_0000000324 | RMN_0000000528 | 467000000 |
2021 | KN07000 | 1 | RRN_0000000324 | RMN_0000000528 | 467000000 |
2021 | KN07000 | 1 | RRN_0000000324 | RMN_0000000563 | 467000000 |
2021 | KN07000 | 1 | RRN_0000000324 | RMN_0000000563 | 467000000 |
2021 | KN07000 | 1 | RRN_0000000324 | RMN_0000000567 | 467000000 |
2021 | KN07000 | 1 | RRN_0000000324 | RMN_0000000567 | 467000000 |
2021 | KN07000 | 1 | RRN_0000000324 | RMN_0000000489 | 575000000 |
2021 | KN07000 | 1 | RRN_0000000324 | RMN_0000000489 | 575000000 |
2021 | KN07000 | 1 | RRN_0000000325 | RMN_0000000578 | 468000000 |
2021 | KN07000 | 1 | RRN_0000000325 | RMN_0000000578 | 468000000 |
2021 | KN07000 | 2 | RRN_0000000308 | RMN_0000000554 | 135400000 |
2021 | KN08000 | 1 | RRN_0000000299 | RMN_0000000409 | 354000000 |
아래표와 같이 year, bsns_cd, sn을 기준으로 ano, bno에 대한 asc order를 유지한 상태로 ano, sum에 따른 일련번호(sn2)를 부여하려고 합니다.
year | bsns_cd | sn | ano | bno | sum | sn2 |
---|---|---|---|---|---|---|
2021 | KN07000 | 1 | RRN_0000000324 | RMN_0000000489 | 575000000 | 1 |
2021 | KN07000 | 1 | RRN_0000000324 | RMN_0000000489 | 575000000 | 1 |
2021 | KN07000 | 1 | RRN_0000000324 | RMN_0000000493 | 464000000 | 2 |
2021 | KN07000 | 1 | RRN_0000000324 | RMN_0000000493 | 464000000 | 2 |
2021 | KN07000 | 1 | RRN_0000000324 | RMN_0000000528 | 467000000 | 3 |
2021 | KN07000 | 1 | RRN_0000000324 | RMN_0000000528 | 467000000 | 3 |
2021 | KN07000 | 1 | RRN_0000000324 | RMN_0000000563 | 467000000 | 3 |
2021 | KN07000 | 1 | RRN_0000000324 | RMN_0000000563 | 467000000 | 3 |
2021 | KN07000 | 1 | RRN_0000000324 | RMN_0000000567 | 467000000 | 3 |
2021 | KN07000 | 1 | RRN_0000000324 | RMN_0000000567 | 467000000 | 3 |
2021 | KN07000 | 1 | RRN_0000000325 | RMN_0000000578 | 468000000 | 4 |
2021 | KN07000 | 1 | RRN_0000000325 | RMN_0000000578 | 468000000 | 4 |
2021 | KN07000 | 2 | RRN_0000000308 | RMN_0000000554 | 135400000 | 1 |
2021 | KN08000 | 1 | RRN_0000000299 | RMN_0000000409 | 354000000 | 1 |
그런데 DENSE_RANK 함수가 용도에 맞다고 생각하여
SELECT year, bsns_cd, sn, ano, bno, sum, DENSE_RANK() OVER (PARTITION BY year, bsns_cd, sn ORDER BY ano, sum) AS sn2
FROM table1;
이 쿼리를 실행하면 sum=464000000인 항목(빨간색)이 sn2=1이 되고 sum=467000000인 항목(파란색)이 sn2=2가 되어서 bno의 순서가 맞지 않게 됩니다.
위와 같은 결과를 출력하려면 쿼리에서 집함함수와 정렬 관계를 어떻게 작성해야 할지 문의드립니다.(큐브리드 버전 9.1, 매니저 버전 10.1)
큐브리드를 이용해주셔서 감사합니다.
위 내용대로 테이블과 데이터를 만들어 테스트를 해 보았습니다.
질의문에 대한 결과 출력
csql> SELECT [year], bsns_cd, sn, ano, bno, [sum]
, DENSE_RANK() OVER (PARTITION BY [year], bsns_cd, sn ORDER BY ano, [sum]) AS sn2
FROM table1;
=== <Result of SELECT Command in Line 1> ===
year bsns_cd sn ano bno sum sn2
============================================================================
'2021' 'KN07000' 1 'RRN_0000000324' 'RMN_0000000493' 464000000 1
'2021' 'KN07000' 1 'RRN_0000000324' 'RMN_0000000493' 464000000 1
'2021' 'KN07000' 1 'RRN_0000000324' 'RMN_0000000528' 467000000 2
'2021' 'KN07000' 1 'RRN_0000000324' 'RMN_0000000528' 467000000 2
'2021' 'KN07000' 1 'RRN_0000000324' 'RMN_0000000563' 467000000 2
'2021' 'KN07000' 1 'RRN_0000000324' 'RMN_0000000563' 467000000 2
'2021' 'KN07000' 1 'RRN_0000000324' 'RMN_0000000567' 467000000 2
'2021' 'KN07000' 1 'RRN_0000000324' 'RMN_0000000567' 467000000 2
'2021' 'KN07000' 1 'RRN_0000000324' 'RMN_0000000489' 575000000 3
'2021' 'KN07000' 1 'RRN_0000000324' 'RMN_0000000489' 575000000 3
'2021' 'KN07000' 1 'RRN_0000000325' 'RMN_0000000578' 468000000 4
'2021' 'KN07000' 1 'RRN_0000000325' 'RMN_0000000578' 468000000 4
'2021' 'KN07000' 2 'RRN_0000000308' 'RMN_0000000554' 135400000 1
'2021' 'KN08000' 1 'RRN_0000000299' 'RMN_0000000409' 354000000 1
14 rows selected. (0.004350 sec) Committed. (0.000010 sec)
1 command(s) successfully processed.
csql>
============================================================================
==> "464000000" 의 값이 sn2=1 이며 위에서 작성된 순서에 맞게 출력 됩니다.
실제 CUBRID 엔진 버전을 알려주시면 감사하겠습니다.
버전 확인 질의문 : select version();