2012-06-21 2 views
0

나는 쿼리 (실제로보기)가 일반적으로 key에서 value2으로의 고유 매핑을 정의해야합니다.GROUP BY를 사용하여 비 고유성 경고 열

select key, value1, value2 
from tbl -- joins are left out here 
where (1=1) -- left out here 
order by key 
; 

보통 결과는 내가 유일하게 value2key를 매핑 할 수 있습니다

key  value1 value2 
-------------------------- 
Harry  fish blue 
Sally  dog  green 
Willy  dog  red 

같은입니다.

그러나 정크 언젠가를 포함 할 수있는 기본 데이터를 어떻게 같이

key  value1 value2 
-------------------------- 
Harry  fish blue 
Harry  fish black  -- <<< breaks uniqueness 
Sally  dog  green 
Willy  dog  red 

나는 쉽게 수녀 고유 행을 식별하는 HAVING 및/또는 GROUP BY 표현을 추가하고 싶습니다. 이 경우에 value2을 사용해야하므로 어떻게 든 집계해야합니다. 제 아이디어는 max입니다.

따라서 예를 들어 결과는

key  value1 value2 count_value2 
---------------------------------------- 
Harry  fish blue  2 
Sally  dog  green 1 
Willy  dog  red  1 

그러나 언제나처럼, 나는 완전히 GROUP BY과 그 배우자들에 의해 당황하고있을 것이다. 나는 그것을 어디에서합니까? 집계는 어디에서?

+0

방법 우리는 해리의 검은 물고기는 쓰레기이며 해리의 푸른 물고기는 괜찮다고 알고 있습니까? 어떤 데이터베이스와 버전이 사용됩니까? –

답변

1

이런 식으로 뭔가?

select 
    key, 
    min(value1) as "a value1", 
    min(value2) as "a value2", 
    max(value2) as "another value2", 
    count(distinct value2) "number of value2" 
FROM tbl 
group by key 
having count(distinct value2) > 1 
+0

오른쪽! '뚜렷한'합병증을 언급하는 것을 잊어 버렸기 때문에 약간 수정해야했지만 힌트를 가지고 관리했습니다. 근본적으로 나는 이제 키, v1, min (v2), max (v2), count (*)를 key (v1, v2 from tbl) 그룹별로 key, v1; 필터가있는 것은 여기에 적용하고 싶지 않습니다. 왜냐하면 나쁜 선을보고 싶기 때문입니다. – towi

1

솔루션 가까이 :

select tbl.*,count(distinct value2) over (partition by key) from tbl 

또는 그룹과

select key,count(distinct value2) from tbl group by key having count(distinct value2)>1 
+0

나는이 대답에 대부분 동의한다. –

+0

우, 말할 수 없습니다. 나는 그룹별로 나갔다. 다른 대답을 보라. 그것이 내가 생각한 것과 더 가깝기 때문이다. 그러나 당신은 아마 맞고 나는 당신을 믿습니다. – towi

0

하여이 시도하고 나이게 알려 주시기 바랍니다 당신은 무엇을

select C.key,C.value1,C.value2,A.count_value2 from 
(select key,value1,COUNT(*) count_value2 
from tbl 
group by key,value1)A 
join 
(select B.key,B.value1,B.value2 from 
(select *,ROW_NUMBER() over(partition by T.key,T.value1 order by T.key) rn 
from tbl T 
group by T.key,T.value1,T.value2)B 
where B.rn=1)C 
on C.key=A.key 
and C.value1=A.value1 
를 찾고 있습니다
+0

* gulp * partitions ... 조인 ... subselects ... 나는 더 간단한 해결책을 가지고 있다고 생각합니다. 다른 대답을보십시오. 하지만 당신이 두 번째 사람이'파티션 '을 언급하고 있기 때문에 나는 그것을 조사 할 것이라고 생각합니다. – towi

관련 문제