mysql order by case when

mysql order by case when的用法

需求

对一个年级的学生按班级进行排序,按班级从小到大排序,如果班级为空排在最后

代码

SELECT
    @ROW := @ROW + 1 AS rowno,
    ID,
    MOBILE_NO,
    FIRST_NAME,
    MEM_CLASS,
    enrollment_year,
    DATE_FORMAT(joinclass_date, '%Y-%m-%d') joinclass_date,
    NIKE_NAME,
    LOGIN_NAME
FROM
    T_MEMBER,
    (SELECT @ROW := 0) r
WHERE
    DELETED = 'N'
AND MEM_TYPE = 1
AND (
    MEM_CLASS IS NULL
    OR MEM_CLASS = ''
    OR MEM_CLASS NOT IN (1, 2, 3, 4, 5, 6)
)
AND SCHOOLID = 11839
AND enrollment_year = 2016
ORDER BY
    CASE
WHEN ifnull(MEM_CLASS, '') = '' THEN
    0
ELSE
    1
END DESC,
 - MEM_CLASS DESC

解读

由于MEM_CLASS 字段被设置成了字符串类型,但我需要按数字从小到大排序,所以MEM_CLASS 前面加个负号“-”,将字符转成数字

下面是重点

其实是个组合排序
ORDER BY
    -- 先按CASE WHEN的结果(ifnull(MEM_CLASS, '') = '' THEN   0 ELSE  1 END)即0和1进行降序排列
    CASE WHEN   ifnull(MEM_CLASS, '') = '' THEN 0 ELSE  1 END DESC,
    -- 再按‘- MEM_CLASS’进行降序排列(即数字升序排列)
     - MEM_CLASS DESC
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值