MYSQL升序排序,但是值为-1的放在最后面

本文介绍三种SQL语句实现学生成绩升序排列的方法,其中成绩为-1的学生排在最后。第一种使用基本的条件判断,第二种利用field()函数,第三种采用case when...else...end语句。实测显示,第一种方法执行速度最快。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在工作中遇到一条SQL语句,学生成绩按照升序排列,但是成绩为-1(没来参加考试的学生成绩为-1)的人排在最后面。最终总结了三种写法:

  1. select * from table order by score = -1 asc , score asc
  2. select * from table order by field(score , -1) asc , score asc
  3. select * from table order by (case score when -1 then 1 else 0 end) asc , score asc

三种写法主要区别在判断条件
写法一中根据score = -1判断,当成绩为-1时,判断条件值为1,否则为0,通过升序排列将成绩为-1的数据排在最下面,然后根据成绩排序。
写法二中运用field(str,str1,str2)方法,该方法将str字段的值与str1和str2分别进行匹配,匹配权重为1,2…依次递增,没有匹配的权重为0。在该语句中将score的值与-1进行匹配,此时-1成绩对应的权重为1,正常成绩对应权重为0,通过升序排列将成绩为-1的数据排在最下面,然后根据成绩排序。
写法三中运用case ... when ... else ... end方法进行选择,将-1成绩置为1,正常成绩置为0,通过升序排列将成绩为-1的数据排在最下面,然后根据成绩排序。
三种方法中写法一速度最快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值