다음과 같은 테이블이 있습니다.
usr_name |
usr_id |
usr_jumin |
usr_hobby |
usr_job |
usr_phone |
김갑돌 |
1001 |
1111112222222 |
농구 |
무직 |
01111111111 |
김갑돌 |
1002 |
1111112222222 |
농구 |
무직 |
01111111111 |
홍길동 |
1003 |
3333334444444 |
독서 |
개발직 |
02222222222 |
홍길동 |
1004 |
3333334444444 |
독서 |
개발직 |
02222222222 |
...
..
.
.
원래는 중복되어선 안되지만, 여러군데서 회원가입을 받기 때문에 가끔 저렇게 중복된 값이 들어온다고 전제합니다.
이러한 중복가입자들에 대한 리포트를 작성해야 하는데, 쿼리가 잘 안되네요..
리포트에 관한 출력 양식은 다음과 같습니다.
usr_name |
usr_id |
usr_jumin |
usr_hobby |
usr_job |
usr_phone |
김갑돌 |
1001 |
1111112222222 |
농구 |
무직 |
01111111111 |
홍길동 |
1003 |
333333444444 |
독서 |
개발직 |
02222222222 |
...
..
.
즉, 주민번호를 기준으로 중복된 데이터들을 뽑아오는데, 주민등록번호 이외의 값들 (usr_name, usr_id, usr_hobby, usr_job, usr_phone등등) 은 중복이 안될 수도 있습니다. 그리고 중복된 데이터들은 하나씩만 나와야 합니다.
mysql에선 다음과 같은 쿼리로 간단하게 뽑아 올 수가 있는데요,
select *
from usr_list
group by usr_jumin
having count(*) > 1
이 경우에 중복되지 않는 컬럼들은 내부적인 인덱스로 자동으로 추출해서 보여주는것 같습니다. 어쨌든 주민등록번호 외에 다른 컬럼들은 해당 중복 가입자의 데이터 가운데서 아무꺼나 가져와도 상관없구요.
오라클에서 저런 쿼리를 사용하니 group by에 명시하지 않은 컬럼은 가져올 수가 없더군요. 그렇다고 해서 가져올 컬럼들을 모두 group by절에 넣자니, 중복 가입자에 대한 데이터가 중복한 횟수만큼 가져오게 되고...
설명이 좀 애매하긴 하지만, 아무튼 위와 같은 테이블에서 출력을 위한 양식대로 데이터를 가져오려면 어떻게 쿼리를 만들어야 할까요?
답변에 미리 감사드립니다..
|