oracle sql 转换成 hive sql -子查询转关联查询(四).rownum=1修改为row_number()的示例

其他sql格式也在更新中,可直接查看这个系列,要是没有你需要的格式,可在评论或私信我

oracle的rownum和hive的row_number()理论

oraclehive示例
rownumrow_number()over()oracle查询数据默认自带rownum。 hive中不带 ,查询时需要自己加上 :row_number() over (partition by contno order by statetype ) rownum 注: partition by 后面跟分组 order by 后面跟排序字段

oracle的rownum和hive的row_number()示例代码

一条关联条件的时候sql改造

oracle 原sql

select 
	(
	select bankname
	from B
	where bankcode = a.bankcode
	and rownum = 1
	) as bankname
from 
	A a

hive 改sql

select 
	 b.bankname as bankname
from 
	A a
	LEFT JOIN
	(select bankname ,row_number() over (partition by bankcode order by bankname )  num, bankcode
	from B
	) b
	on b.bankcode = a.bankcode
	and b.num = 1

讲解(个人理解):
(1),partition by中就等于是分组的用处,根据bankcode 来分组,在外面on中拿到 b.bankcode 数值和a表的bankcode值比较,如果不止一个条件在partition by bankcode后面加逗号连接和上篇from中子查询一样,算了在写一个吧
(2),order by 就是分组,根据什么来排序,后面b.num = 1就是显示第一条,我的理解就是oracle里面有自带的排序函数,所以直接rownum =1就行了,hive要自己写而已

多条关联条件的时候sql改造

oracle 原sql

select 
	(
	select bankname
	from B
	where bankcode = a.bankcode
	and id = a.id
	and rownum = 1
	) as bankname
from 
	A a

hive 改sql

select 
	 b.bankname as bankname
from 
	A a
	LEFT JOIN
	(select bankname ,row_number() over (partition by bankcode,id  order by bankname )  num, bankcode,id 
	from B
	) b
	on b.bankcode = a.bankcode
	and b.id=a.id
	and b.num = 1

讲解:多条件直接在后面加逗号关联,多加了一个id字段

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值