Rownum 증가 문의 0 8 580

by 띵똥 [2019.12.27 17:58:07]


A  B                 c

14  2                1

7   22               2

23  2                2

14  2                2

14  29              3

 

컬럼 a,b를 비교하여 b가 a보다 클경우 c값이 증가되도록 만들고 싶은데...어떻게 해야할까요?!

 

by 우리집아찌 [2019.12.30 08:06:11]
count(case when B>A then 1 end) over ( order by rownum ) + 1

 


by 마농 [2019.12.30 08:11:55]

1. b가 a보다 클경우 조건을 만족해야 값이 증가해야 하는데?
 - 첫번째 행이 조건을 만족하지 않는데도 1 로 시작하네요? 1 을 기본으로 깔고 가나요?
 - 그렇다면? 첫번째 행이 조건을 만족하는 경우에는 뭘로 시작하나요? 1? 2?
2. 예시에는 a, b 2개 항목만 보이는데?
 - 정렬이 필요한 문제입니다.
 - 정렬 기준 항목이 필요합니다. 정렬 기준 항목을 제시해 주세요.


by 띵똥 [2019.12.30 10:43:05]

죄송합니다. 설명이 부족했네요.

첫행부터 1로 시작해서 오른쪽이 더 클경우에만 +1이 됩니다.오른쪽이 작을경우는 기존 번호를 유지하고요.

정렬은 입력된순서 시퀀스입니다


by 마농 [2019.12.30 11:28:26]

표현이 살짝 모호합니다. 1 인지 2 인지 아직 모르겠네요.
모호한 표현 보다는 실제 값을 가지고 설명해 주시는게 좋습니다.
첫번째 행이 조건을 만족하는 경우에는 뭘로 시작하나요? 1? 2?


by 띵똥 [2019.12.30 13:43:41]

음..c의값은 첫행은 무조껀 1부터 시작합니다.

두번째행에서 a와b를 비교하여 b가 a보다 클경우는 2 아닐경우는 1.

세번째행에서 a와b를 비교하여 b가 a보다 클경우는 두번째행의 c값+1 아닐경우는 두번째행의 c값 이런식입니다.


by 띵똥 [2019.12.30 13:46:58]

우리집아찌님의 방법으로 했더니 제대로 나오네요 감사합니다^^


by 마농 [2019.12.30 13:53:24]

첫째행이 조건을 만족하지 않으니 제대로 나오는 거죠.
seq 컬럼을 이용해 정렬해야 하는데 단순 rownum 을 이용하는 것도 문제의 소지가 있습니다.


by 마농 [2019.12.30 14:12:00]
WITH t AS
(
SELECT 1 seq, 14 a, 2 b FROM dual
UNION ALL SELECT 2,  7, 22 FROM dual
UNION ALL SELECT 3, 23,  2 FROM dual
UNION ALL SELECT 4, 14,  2 FROM dual
UNION ALL SELECT 5, 14, 29 FROM dual
)
SELECT seq, a, b
     , COUNT(c) OVER(ORDER BY seq) c
  FROM (SELECT seq, a, b
             , CASE WHEN ROW_NUMBER() OVER(ORDER BY seq) = 1 OR a < b THEN 1 END c
          FROM t
        )
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입