2016-06-21 54 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

相关问题