2016-06-21 89 views
0

我有一個表,看起來像這樣如何生成每個只有一個屬性的ID表?

id attribute 
1 a 
1 a 
2 b 
2 a 

我要收集所有這一切都只有一個屬性的ID的。因此,在該示例情況:

id 
1 

我最初的想法是使用一個where,但是這將返回:

id 
1 
1 
2 

由於2也有一個實例的「a」屬性。

P.S.我意識到標題的措辭是模棱兩可的;也許在這種情況下使用比屬性更好的術語?

回答

2

ohh我剛剛看到配置單元,但這是非常標準的sql試試看。

SELECT 
    ID 
FROM 
    TABLENAME 
GROUP BY 
    ID 
HAVING 
    COUNT(DISTINCT attribute) = 1 

GROUP BY聚合發生後,它就像是一個where語句。

+0

HiveQL有許多共同的特點與更標準的sql語句,所以我需要運行它是肯定,但我認爲這可能做它我。如果成功的話,我會在幾分鐘內回答。謝謝馬特! –

+0

我想這可能是。我仍然需要構建一個Hadoop環境來玩:) – Matt

+0

我強烈推薦@Matt。特別是對於Tez-on-Hive,與您合作的過程非常愉快 - 一旦您瞭解了HiveQL的一些怪癖。 –

0
SQL的

HiveQL相當於使用group byhavingdistinct

select id from (select id,count(distinct attribute) cnt from table_actual group by id having cnt='1') tableouter; 
+0

但這個查詢只會讓他的id 1屬性a。他想要獲得所有隻有1個不同屬性的ID。所以爲了使用HAVING子句,group by是必需的。當你不想進一步限制你的結果時,DISTINCT會很棒 – Matt

+0

感謝Matt提供的頭像,更新了查詢以匹配所有可能的結果。 – syadav