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 39307 게시물 읽기
No. 39307
중복관련 정렬 질문입니다.
작성자
박태형(truekong)
작성일
2012-02-21 17:07
조회수
4,017

안녕하세요.

중복 제거를 하면서 다른 UID의 개수를 count하고자 하는데요, 말로는 설명이 조금 어렵네요. 아래 샘플 data와 뽑고자 하는 결과를 참고하셔서 도움좀 부탁드립니다.

Tooltype과 Tooldata를 세트로 하여 중복을 제거함이 첫째 목적이고 SUB가 가진 Tool의 수를 표기하는게 두번째 목적입니다.

count over와 lag로 쿼리를 했었는데요. 이 두가지를 사용하지 않고 쿼리를 만들고 싶습니다.

SUB   Tooltype     Tooldata                  etc

1            1            aaa@aaa.com         aaa

2            1            aaa@aaa.com         bbb

3            2            12341234                 ccc

4           1            ddd@ddd.com          ddd

1           6           asdasdfasdf                eee

3           2             456456456                fff

 

<얻고자 하는 결과값>

두번째 레코드의 경우는 tooltype과 tooldata 가 첫번째 레코드와 중복이기에 제거되야 하구요,

sub 가 1인 data가 2개가 있기 때문에 subcount에 2로 표기되게 해야 합니다.

sub가 4인 경우 중복이 없으니 결과가 나오는데 툴도 하나니 subcount가 1로 표기됩니다.

SUB   Tooltype     Tooldata                  etc         SUBCOUNT

1             1             aaa@aaa.com      aaa              2

1             6           asdasdfasdf            eee              2

3             2           12341234                ccc              2

3             2             456456456                fff             2

4              1            ddd@ddd.com          ddd           1

고수님들의 많은 조언좀 부탁드립니다.

 

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

with tmp as (
select 1 as sub, 1 as Tooltype, 'aaa@aaa.com' as Tooldata, 'aaa' as etc from dual union all
select 2,1, 'aaa@aaa.com', 'bbb' from dual union all
select 3,2, '12341234'   , 'ccc' from dual union all
select 4,1, 'ddd@ddd.com', 'ddd' from dual union all
select 1,6, 'asdasdfasdf', 'eee' from dual union all
select 3,2, '456456456  ', 'fff' from dual
)
select min(a.sub) sub
     , a.tooltype
     , a.tooldata
     , min(a.etc) etc
     , max(b.cnt) subcount
  From tmp a
     , (
  select sub
       , count(*) cnt
    from tmp
   group by sub
       ) b
 where a.sub = b.sub
 group by a.tooltype, a.tooldata
 order by 1,2
 

 

얻고자 하시는 결과값에만 맞춰봤습니다.

hanul072(hanul072)님이 2012-02-21 17:56에 작성한 댓글입니다.

1. 왜, Count Over 와 Lag 를 쓰면 안되나요?
   Count Over 와 Lag 에만 국한된 얘기인가요?
   넓은 의미로 분석함수를 쓰지 말라는 얘기인가요?
   분석함수를 써야 좋을 듯 싶은데.. 왜 쓰지 말아야 하나요?

2. 중복 제거시 어떤걸 남기고 어떤걸 제거하는지에 대한 기준이 있나요?

3. subcount 는 결과에 대한 카운트인가요? 원본에 대한 카운트인가요?
   예를 들어 결과에는 3이 2건이지만 원본에는 3건이라면???

마농(manon94)님이 2012-02-21 18:26에 작성한 댓글입니다.
이 댓글은 2012-02-21 18:33에 마지막으로 수정되었습니다.

with t as
(
select '1' sub, '1' tooltype, 'aaa@aaa.com' tooldata, 'aaa' etc from dual union all
select '2' sub, '1' tooltype, 'aaa@aaa.com' tooldata, 'bbb' etc from dual union all
select '3' sub, '2' tooltype, '12341234' tooldata, 'ccc' etc from dual union all
select '4' sub, '1' tooltype, 'ddd@ddd.com' tooldata, 'ddd' etc from dual union all
select '1' sub, '6' tooltype, 'asdasdfasdf' tooldata, 'eee' etc from dual union all
select '3' sub, '2' tooltype, '456456456' tooldata, 'fff' etc from dual
)
select  sub
       ,tooltype
       ,tooldata
       ,etc
       ,sub_cnt
from (
select  sub
       ,tooltype
       ,tooldata
       ,etc
       ,count(*) over (partition by sub) sub_cnt
       ,row_number() over (partition by tooltype,tooldata order by rownum) rn
from t
)
where  rn = 1

rt님이 2012-02-22 13:23에 작성한 댓글입니다. Edit

아.. 분석함수없이군요..

다시 해봐야겠네요

rt님이 2012-02-22 13:25에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
39311문자열에 &가 포함되니.. [1]
궁금이
2012-02-24
3598
39310테이블 속성 [1]
뉴질랜드목동
2012-02-24
3445
39309데이터 변화가 없는데, Snapshot too old (ORA-01555) 발생될까요? [1]
데니아
2012-02-23
4205
39307중복관련 정렬 질문입니다. [4]
박태형
2012-02-21
4017
39306DB_LINK와 session간의 관계에 대해서 질문 여쭤봅니다..
이경택
2012-02-21
3730
39305날짜관련 질문 드립니다. [3]
김종수
2012-02-21
4306
39303Oracle unixODBC 설정 방법 문의
왕두세
2012-02-20
5386
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.022초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다