2016-08-15 82 views
0

我有我的數據sometable這樣的:HIVE中如何使用「in」中的「in」子句?

col1 col2 col3 
A  B  3 
A  B  1 
A  B  2 
C  B  1 

我想所有包含COL3的某些行的col1col2獨特的羣體。就像所有包含「2」的col1和col2組。

我想要做這樣的事情:

select col1, col2 from sometable 
group by col1, col2 
having col3=1 and col3=2 

但我希望它只是返回在COL3有兩個1和2的實例組。所以,查詢後的結果應該返回:

col1 col2 
    A  B 

如何在HIVE中表達這一點?謝謝。

+0

如果col1中多於一個元素符合col3中的條件會怎麼樣,你會怎麼寫。如果C在col3中也有2個元素,答案會是col1的[A,C](數組)嗎? – gobrewers14

回答

0

我不知道爲什麼其他人刪除了正確,然後幾乎正確的答案,但我會把他們的備份。

SELECT col1, col2, COUNT(DISTINCT col3) 
FROM 
    sometable 
WHERE 
    col3 IN (1,2) 
GROUP BY col1, col2 
HAVING 
    COUNT(DISTINCT col3) > 1 

如果您確實想要返回符合條件的所有記錄,則需要執行子選擇並返回主表以獲取它們。

SELECT s.* 
FROM 
    sometable s 
    INNER JOIN (
     SELECT col1, col2, COUNT(DISTINCT col3) 
     FROM 
      sometable 
     WHERE 
      col3 IN (1,2) 
     GROUP BY col1, col2 
     HAVING 
      COUNT(DISTINCT col3) > 1 
    ) t 
    ON s.Col1 = t.Col1 
    AND s.Col2 = t.Col2 
    AND s.col3 IN (1,2) 

這樣做的依據是窄/行集合篩選到要測試COL3 IN(1,2)的行再算上COL3的DISTINCT值,以確保兩個1和2存在,不只是1 & 1或2 & 2.

+0

第一個很棒,謝謝。 – Hunle

0

我認爲下面提到的查詢將會對您​​的問題有用。

select col1,col2 
from Abc 
group by col1,col2 
having count(col1) >1 AND COUNT(COL2)>2