database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 41662 게시물 읽기
No. 41662
데이터 순위 부여...궁금해요(예시수정)
작성자
오라클ㅇ
작성일
2018-12-03 16:11ⓒ
2018-12-06 12:09ⓜ
조회수
2,627

안녕하세요.

데이터 결과의 순위를 아래와 같이 부여하고 싶은데..

어떻게 할지 감이 안와서 조언 부탁드립니다.

예시

코드   순위

10          3

10          2

10          1

NULL     0 

10          2

10          1

NULL     0

일자로 ORDER BY 되어 있습니다.

코드 값이 같을 경우 순차적으로 1,2..... 표시되며

중간에 NULL인 경우는 0으로 NULL이 한번 나온 경우에

다음 데이터가 다시 10이 나오면  다시 1부터 순위를 부여하고 싶습니다.

설명이 잘 되었는지 모르겠지만 .. 대략 이런 경우에 어떻 방법으로 접근하면 

좋은지 조언좀 부탁드립니다.

감사합니다.

==========================================================

마농님 댓글 감사합니다...  

말씀대로 예시가 부족해서 아래와 같이 수정하였습니다.

코드     순위

10        3

20        2

10        2

20        1

10        1

Null      0

20        2

20        1

Null      0

10        1

Null      0

20        1

Null      0

10        2

10        1

Null     0

(예시는 일자(systimestamp) desc 정렬되어 있으며

코드값은 10,20 두값으로 한정되어 있습니다)

코드 컬럼만을 이용해서 순위를 부여하려고 하고 있으며..

패턴(?) 또는 규칙이라고 한다면 코드 null 다음에 오는 값(10또는20)에 대해 순위를 

부여하려고 합니다. 중간에  다시 null이 나오고 다음값(10또는20)나오면 순위를 1부터 리셋하여

부여하고자 합니다..

예시와  원하는 의도를 글로 표현하는게.. 부족해서 죄송합니다..

적절한 조언 부탁드립니다.

감사합니다.

 

이 글에 대한 댓글이 총 3건 있습니다.

질문중에 "코드 값이 같을 경우 순차적으로" 라는 표현이 있네요?
그렇다면 예시자료가 좀더 복잡했으면 하는데요.
예시엔 코드가 1가지 뿐이네요?
여러 코드가 섞여 있는 샘플이었으면 질문을 정확하게 이해하는데 도움이 될 것 같네요.

마농(manon94)님이 2018-12-06 10:49에 작성한 댓글입니다.

WITH t AS
(
SELECT 16 dt, 10 cd FROM dual    -- 3
UNION ALL SELECT 15,   20 FROM dual    -- 2
UNION ALL SELECT 14,   10 FROM dual    -- 2
UNION ALL SELECT 13,   20 FROM dual    -- 1
UNION ALL SELECT 12,   10 FROM dual    -- 1
UNION ALL SELECT 11, Null FROM dual    -- 0
UNION ALL SELECT 10,   20 FROM dual    -- 2
UNION ALL SELECT  9,   20 FROM dual    -- 1
UNION ALL SELECT  8, Null FROM dual    -- 0
UNION ALL SELECT  7,   10 FROM dual    -- 1
UNION ALL SELECT  6, Null FROM dual    -- 0
UNION ALL SELECT  5,   20 FROM dual    -- 1
UNION ALL SELECT  4, Null FROM dual    -- 0
UNION ALL SELECT  3,   10 FROM dual    -- 2
UNION ALL SELECT  2,   10 FROM dual    -- 1
UNION ALL SELECT  1, Null FROM dual    -- 0
)
SELECT dt, cd
     , NVL2(cd, ROW_NUMBER() OVER(PARTITION BY gb, cd ORDER BY dt), 0) rn
  FROM (SELECT dt, cd
             , COUNT(DECODE(cd, null, 1)) OVER(ORDER BY dt) gb
          FROM t
        )
 ORDER BY dt DESC
;

마농(manon94)님이 2018-12-06 14:31에 작성한 댓글입니다.

마농님 댓글 감사합니다.

많은 도움 얻고 갑니다.

고맙습니다~

오라클ㅇ님이 2018-12-06 17:46에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
41665맥북 부트캠프 오라클 쿼리박스 에러 도와주세요.. [1]
유지예
2018-12-11
3517
41664ROLLBACK이 안됩니다. [2]
빌다크홈
2018-12-10
2549
41663행 컬럼 데이터 열 (세로)로 구분하여 구하는 쿼리 질문 드립니다. [3]
양정훈
2018-12-04
2947
41662데이터 순위 부여...궁금해요(예시수정) [3]
오라클ㅇ
2018-12-03
2627
41661dbms_jobs에서 interval이 다음날 1일에 도는 이유가 뭘까요?
trikepton
2018-12-03
2602
41660테이블조회결과를 한줄로변경? 문의.. [2]
배움이
2018-11-27
2982
41658누적의 차이를 구할방법 [2]
궁금이
2018-11-20
4558
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다