mysql之复杂排序

1.场景

这次遇到业务场景稍微复杂一些,需求是这样的:
仓库表中有三个字段,分别是:
  仓库权属(自有-1、租赁-2)
  物联网(有-1、无-0)
  电子仓单系统(有-1,2、无-3,0)

需要根据标签的数量进行排序,依次是3>2>1>0,在同类型中又会存在相应的顺序,具体顺序如下图所示
在这里插入图片描述

2.思路

个人认为难点在于sql该如何编写,通过sql的方式来对数据进行排序,因为通过Java代码看起来比较困难。
言归正传,我用的解决方案是 把每一条数据的这三个字段通过使用IF函数来分别进行取值,满足条件的取1,不满足条件的取0,然后把三个IF相加得到的结果进行DESC倒序排列,三个IF相加的最大的结果就是3,最小的结果就是0,这样就可以达到按照标签排序的目的了;每个标签中各自的顺序,则在后面继续添加相应的排序就可以了,最后再根据updateTime进行一个倒序排序。具体请看如下sql

3.解决方案

#WarehouseOwnership			仓库权属,1:自有,2:租赁
#WarehouseIotLoad			是否加载物联网设施,0:否,1:是
#ReceiptSystemOperation		电子仓单运营系统情况  1,2:存在,3:不存在
SELECT
	WarehouseName,
	WarehouseOwnership,
	WarehouseIotLoad,
	ReceiptSystemOperation 
FROM
	warehouse 
ORDER BY
	(IF( WarehouseOwnership IN (1,2),1,0)+IF( ReceiptSystemOperation IN (1,2),1,0)+IF( WarehouseIotLoad = 1,1,0)) DESC,
	WarehouseOwnership = 1 DESC,IF(ReceiptSystemOperation IN (1,2),1,0) DESC,IF(WarehouseIotLoad=1,1,0) DESC,UpdateTime DESC;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shy好好学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值