그룹바이 후 중복제거 문의 1 5 1,649

by 오라클왕따 [Oracle 기초] [2014.04.25 10:53:39]


안녕하세요~ 날씨가 많이 더워졌네요.....^^

다름이 아니라 그룹바이 카운트 후 중복된 값들을 한개씩만 남겨 놓고 삭제를 하려고 하는데요... 아래는 테이블의 데이터 입니다.

순번 코드
1 4375025024104000000
2 4375025024104000000
3 4375025024104000000
4 4375025024104000000
5 4375025024104130003
6 4375025024104130003
7 4375025024104130003
8 4375025024104130003

아래의 쿼리를 실행하면 코드라는 값의 중복된 개수가 4개씩 나옵니다.

SELECT 코드, COUNT(*) FROM 테이블 HAVING COUNT(*) > 1 GROUP BY 코드;

코드 count(*)
4375025024104000000 4
4375025024104000000 4
4375025024104000000 4
4375025024104000000 4
4375025024104130003 4
4375025024104130003 4
4375025024104130003 4
4375025024104130003 4

4개씩 중복된 값들 중에서 한개씩만 남겨놓고 나머지는 삭제를 하고 아래와 같이 테이블 결과를 남기려고 합니다.. 

조언 부탁드리겠습니다 ~(_._)~

순번 코드
1 4375025024104000000
2 4375025024104130003
by 부쉬맨 [2014.04.25 11:16:05]
with t as
(
select '4375025024104000000' as a from dual union all
select '4375025024104000000' from dual union all
select '4375025024104000000' from dual union all
select '4375025024104000000' from dual union all
select '4375025024104130003' from dual union all
select '4375025024104130003' from dual union all
select '4375025024104130003' from dual union all
select '4375025024104130003' from dual
)select distinct a from t

 


by 비니 [2014.04.25 11:26:49]

중복제거 쿼리로 신규 테이블을 CTAS로 복사한다음

원본테이블이 필요 없다면 drop후에 신규로 생성한 테이블을 rename 하시거나

아니면 원본 테이블 rename, 신규 테이블 rename하시는게

 


by 오라클초보 [2014.04.25 11:27:22]
with temp as
( 
select '1' as 순번,'4375025024104000000' as 코드 from dual union all 
select '2','4375025024104000000' from dual union all 
select '3','4375025024104000000' from dual union all 
select '4','4375025024104000000' from dual union all 
select '5','4375025024104130000' from dual union all 
select '6','4375025024104130000' from dual union all 
select '7','4375025024104130000' from dual union all 
select '8','4375025024104130000' from dual
)select rownum as 순번, 코드 from (select 코드 from temp group by 코드)

초보입장에서 바라본 내용입니다.


by 오라클왕따 [2014.04.25 16:16:43]

좋은 정보 정말 감사합니다~

한가지 더 질문을 드려도 될까요?

 

select rownum as RN, 코드 from (select 코드 from 테이블 group by 코드); <-- 이 구문을 이용해서 RN 숫자를 NUM 이라는 컬럼에 넣으려고 합니다.

 

업데이트 구문을 이렇게 짜고 실행하니 "ORA-01427: 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다." 라는 메시지가 나오는데요...

UPDATE 테이블_F A
    SET A.NUM = (select rownum as RN from (select 코드 from 테이블 group by 코드));

이렇게는 업데이트를 할수 없나요?

 

 

 

 


by 마농 [2014.04.25 16:40:50]

조인 조건이 없네요.

단일행이 나올수밖에 없는 조건절이 있어야 합니다.

위의 경우엔 "조회집합"과 "업데이트대상집합"간에 "코드"를 이용해 조인을 해야 하겠지요.

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