首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对Hiveql的MySQL查询

对Hiveql的MySQL查询
EN

Stack Overflow用户
提问于 2016-11-05 23:22:22
回答 1查看 84关注 0票数 1

工作(身份、职级)

数据:

代码语言:javascript
复制
work
------------------
1 | A
1 | B
1 | C
1 | D
2 | A
2 | C
2 | B
3 | C

我需要找到所有的in与他们的计数有共同的秩,它应该显示只有当秩的计数大于2,并打印它们的降序。我已经为此编写了一个mysql查询,但是,我对SparkSQL和HIVEQL还是新手。所以请帮帮我怎么做。例如,使用上述结果集的数据应该是:

mysql查询是:

代码语言:javascript
复制
select a.id,b.id
from work as a, work as b
where a.id>b.id
group by a.id,b.id having group_concat(distinct a.rank order by a.rank)=group_concat(distinct b.rank order by b.rank)

---------------------
id1 | id2 | Count
---------------------
 A  | B   |  3
 B  | C   |  3
EN

Stack Overflow用户

回答已采纳

发布于 2016-11-05 23:45:49

我不认为Hive支持group_concat()。我想这也是一样的:

代码语言:javascript
复制
select a.id, b.id, a.cnt
from (select a.*, count(*) over (partition by a.id) as cnt
      from work a
     ) a join
     (select b.*, count(*) over (partition by b.id) as cnt
      from work b
     ) b
     on a.rank = b.rank and a.cnt = b.cnt
where a.id < b.id   -- I *think* this is allowed in Hive; it not, a subquery or expression in the `having` clause will do the same thing
group by a.id, b.id, a.cnt
having count(*) = a.cnt;

这是获得具有相同排名的ids对的更自然的方法。事实上,在几乎任何数据库中,它都应该比MySQL版本更高效。cross join生成大量数据。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40444326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档