clickhouse应用- JSON排序

需求:按照json中的某个字段进行排序

前端原型如下(可以按照某个学科进行升序降序排序):

数据存储结构:把所有的学科、得分放在一个json数组里

解决办法:直接解析排序字段

select * 
from (select *,
	row_number() over(order by if(subject_json=='[]',1,0),JSONExtractInt(JSONExtractArrayRaw(ifnull(subject_json,'[]'))[1],'score') desc,toInt32(extract(class_name,'\d+')),student_id) row_num,
	1 page_num,
	7 page_size,
	count() over() total_cnt
	from tmp
)
where row_num > (page_num - 1) *page_size AND row_num <= page_num * page_size

其中:

JSONExtractInt(JSONExtractArrayRaw(ifnull(subject_json,'[]'))[1],'score')

按照json数组中第一个元素的score的值进行排序。再通过开窗计算出每行数据的排名,并根据分页参数进行分页。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值