동일기준끼리 그룹핑값 적용 0 10 955

by 박상훈 [SQL Query] [2017.12.12 09:11:23]


안녕하세요

아래와 같은 샘플 쿼리처럼 동일기준끼리 특정한 GROUPING값(함수호출을 통한 채번)을

나타내고 싶은때는 어떻게 처리하면 좋을런지요? 조언 부탁드립니다.

with tst as
( select '100' no, '김' name from dual union all
  select '110' no, '김' name from dual union all
  select '120' no, '김' name from dual union all
  select '200' no, '이' name from dual union all
  select '210' no, '이' name from dual  )
select no, name
     , row_number() over(partition by name order by no ) rn
from   tst
;

NO	NAME	RN   GROUPING값
100	김	    1    'ABC'
110	김	    2    'ABC'
120	김	    3    'ABC'
200	이	    1    'DEF'
210	이     2    'DEF'

 

by 우리집아찌 [2017.12.12 09:36:31]

그룹핑을 name으로 하셨는데  그럼 그룹핑값이 name이지요

무슨 특별한값이 필요하신지?


by 박상훈 [2017.12.12 09:41:45]

예를 들다보니 표현이 좀 어색하네요 ㅠㅠ

그룹핑된 기준으로 새로운 코드값을 별도로 채번하고 싶어서요

그 코드값은 함수를 통해서 생성됩니다.


by 마농 [2017.12.12 09:45:12]

함수가 이미 존재하나요?
함수에 name 을 입력하면 되는 건 아닌가요?
함수에 뭘 입력해야 하나요?
함수의 결과는 어떻게 나오나요?
어떤 규칙을 가진 함수인가요?


by 박상훈 [2017.12.12 09:53:45]

네 함수는 이미 있습니다.

함수 입력값은 Sequence 입니다.

결과는 시간과 Sequence 조합 값이 Return 됩니다.


by 마농 [2017.12.12 09:59:16]

Sequence 는 어디 있죠?
Sequence 는 name 에 종속적인 값인가요?
해당 함수가 채번 함수라면?
이는 위와 같은 중복 테이블에서 select 할 때 쓰는게 아니라...
유니크 테이블에서 값이 입력될 때 사용되어야 할 것 같은데요?


by 박상훈 [2017.12.12 10:06:43]

Sequence 는 같은 DB에 있구요

이름이나 다른 칼럼에 종속적이지 않고 독립적입니다.

유니크한 값을 채번하려는게 아니라 그룹핑된 기준으로 임의의 코드값을 가지고 있으려고 합니다.

 


by 마농 [2017.12.12 10:11:00]

말씀하시는 내용이 이해가 안갑니다. 서로 사용하는 용어의 의미가 다른 것 같습니다.
일부만 조금씩 노출하지 마시고 전체 그림을 그려주세요.
Sequence 가 오라클 의 Sequence 객체를 말하는 건가요? 아니면 다른 의미의 값인가요?
'김' 이라는 사람의 Sequence 가 이미 다른 테이블에 저장되어 있다는 건가요?


by 박상훈 [2017.12.12 10:46:47]

네 오해가 있네요 일부러 조금씩 말씀드릴려던건 아닙니다.

Sequence는 오라클 객체 입니다.

'김' 이라는 사람은 sequence와 매핑 관계는 전혀 없구요.

단순히 '김' 이면 sequence.nextval 값이 return 됩니다.

첫번째 레코드와 두번째 레코드가 동일한 기준이면

같은 코드값 가지고 다르면 새로운 코드값을 가질려고 합니다.

코드값은 오라클 함수를 이용해서 sequnece + 코드값 으로 리턴해서 그룹핑 된 기준으로

유니크하게 만들려고 합니다.

너무 우왕좌왕 설명드려 죄송합니다.


by 마농 [2017.12.12 11:07:08]

테이블 중복 제거하면서 시퀀스와 함께 유니크 테이블을 만드셔야 할 듯 합니다.
CTAS 나 INSERT~SELECT 방식을 이용하시면 되구요.
다음에 만들어진 테이블을 조인하여 seq 값을 이용하시면 됩니다.


by 마농 [2017.12.12 11:15:50]

Sequence 객체는 온라인에서 유일값 입력시 경합을 줄이고 최대한 빠르게 작업하기 위해 사용합니다.
즉, 입력용입니다.
이걸 조회용으로 사용하고자 하는 이유가 잘 납득이 안가구요.
조회용으로 사용하면 1회성으로 스쳐 지나가는 값입니다.
따로 저장하지 않으면 결과가 남지 않습니다.
구별 기능만 하고자 한다면 굳이 시퀀스 사용 없어도 될 것 같은데요.
온라인성도 아니고 배치성 쿼리인 듯 한데요.
왜 시퀀스를 사용하는지 도무지 모르겠습니다.

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