在hql开发中巧用json解决问题

背景

某次开发中,要展示金额top1-10的商品名称、id、金额都得展示出来,
如果一个一个的join再取出来,一是代码不美观,二是效率太低,
所以在这里我们采用先将所需要展示的信息拼成json,然后使用get_json_object解决

解决

t1表已经算出排名,rk即为排名

 select 
         id,
         nf,
         concat('"',cast(rk as string),'":{"sphfwlbmc":"',sphfwlbmc,'","bl":"',cast(nvl(spjezzjebl,0) as string),'"}')  as info1  
 from
 t1
 where rk <= 10

第一步,将排名前10的商品,将排名、商品名称,金额比例按如上所示拼成字符串

    select 
id,
nf,
concat('{',concat_ws(',',collect_set(info1)),'}') as info
from t2
group by id,nf

第二步,在以id,nf分组将第一步拼接的字符串按照json 的数据格式整理

       ,get_json_object(get_json_object(t2.info,'$.1'),'$.sphfwlbmc') 
       ,nvl(get_json_object(get_json_object(t2.info,'$.1'),'$.bl'),0) 

第三步,即可取出排名金额1-10商品名称和比例,将 . 1 换成 .1换成 .1换成.2到$.10,即可取出剩余

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值