2017-03-14 1 views
0

아래 예제 장난감을 사용하여 DISTINCT가 작동하는 방식을 명확히하고 싶었습니다. 가정 당신은 2 열 및 데이터의 2 행과,과 같이 테이블을했다 :모든 열에 하이브 DISTINCT()?

SELECT DISTINCT colA, colB 
FROM table1; 

에 대해 반환되는 다음과 같은 결과 : 나는 SELECT DISTINCT 쿼리를 실행

SELECT * 
FROM table1; 

colA colB 
A  B 
A  C 

가정하자 위의 쿼리?

결과 가능성 1 :

A  B 
A  C 

이 가능성에 대한 생각은 값이 colA에 구별없는 동안 두 열을 고려할 때, 전체 반환 행, 독특한, 또는 별개의 것입니다. 나는 colAcolB 사이의 쉼표의 영향으로 인해 SELECT DISTINCT colA, colB에 있으며, DISTINCTcolA으로 제한하는지 여부로 인해 불확실합니다.

결과 가능성 2 :

A  B 

결과 가능성 3 :

A  C 

감사합니다.

+0

가능성 *** *** 별개의 모든 열에 적용됨 *** colA를 선택한 경우 1 개의 레코드 결과가 나옵니다. A : 방금 distict 열 B를 선택한 경우 B와 C를 얻습니다. 3 번째 레코드 A, B가 있다면 3 번째 레코드가 첫 번째 레코드와 중복되므로 별개의 colb을 선택할 때 여전히 2 개의 레코드 만 얻을 수 있습니다. ColA를 사용하면 두 번째 레코드 만 얻습니다. ColB는 세 번째 레코드가 다시 레코드 1의 정확한 복사본입니다. – xQbert

답변

2

DISTINCT는 완전한 행에 적용됩니다. 결과 결과 가능성 1 즉

A B 
A C 
1

같을 있도록 아마도이 도움

A  B 
A  C 

상기 두 행 다른. 이 쿼리 :

SELECT colA, colB 
FROM table1 
GROUP BY colA, colB; 

데이터에 표시 colA/colB의 모든 쌍을 반환하는 것입니다 :

SELECT DISTINCT colA, colB 
FROM table1; 

는 기능적으로 동일합니다.

+0

기능적으로 동일한 두 솔루션 사이에서 계산적으로 다른 하나보다 효율적입니까? 간단한 대답이나 더 미묘한 차이가 있는지 확실하지 않습니다. 나는 데이터의 페타 바이트를 다루기 때문에 관심이있다. – user2205916

+0

@ user2205916 . . 그것은 데이터베이스에 달려 있지만 성능은 꽤 비슷해야합니다. –

관련 문제