背景
某次开发中,要展示金额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,即可取出剩余