在Hive查询中查找唯一条目

时间:2018-02-02 12:38:37

标签: sql database hive

我需要找到仅由国家种植的独特水果,不应该由一个以上的国家种植。由独特国家统计的水果

typedef int (list::*find)(int val);
{
    return 0;
}

输出:

class list {
public:
int *find(int val);
}

草莓,香蕉,mosambi仅在印度种植,因此共有3种独特的水果 芒果,菠萝只在澳大利亚种植,所以共有2种独特的水果

1 个答案:

答案 0 :(得分:1)

一种方法使用两级聚合:

select country, count(*) as num_unique_fruits
from (select fruit, min(country) as country
      from t
      group by fruit
      having count(*) = 1
     ) f
group by country;

请注意,如果只有一行,则min(country) 该行的国家/地区。

更“传统”的方法是使用not exists

select country, count(*)
from t
where not exists (select 1 from t t2 where t2.fruit = t.fruit and t2.country <> t.country)
group by country;

第一个可能在Hive中表现更好,但如果考虑性能则值得尝试这两种方法。