关于在sql中使用order by实现排序出错问题
在sql中使用order by实现排序出错
因为本人正在学习数据库阶段,所以我会把我遇到的问题和一些我已经解决了的例子放上来,仅供参考~
1.一般情况下
我们在命令行里使用order by来进行排序。
但存在一个问题,就算我们进行了排序,还是会出现错误,就拿下面这个例子来说,
按照alexa栏进行升序排列,但排序过后却变成了这个样子,
噔噔噔?这个3是怎么回事,怎么不听话,使用的语句没有错啊,实际上,此处的alexa是varchar类型的,在使用order by进行排序时,会自动按照字符串排序的方式,1开头的排在前面,然后再排2开头的,3,4,5······
2.要想按照数值排序
就得先将字符串类型改为数值类型,我百度过,都说的是将order by ASC改为order by convert(int ,alexa)或者order by cast(alexa as int),但实际上我试验了,还是报错,不知道为什么,
后来我考虑到数值类型除了int,还有其他的,我就试了一下decimal,decimal表示的是精度值,百度上说当用 int类型会有溢出时,可以用 decimal 类型进行处理,把结果可以用 convert 或是 cast 进行转换。
此时就可以了,结果如下图显示:
SQL ORDER BY自定义排序规则
默认SQL语句中的order by会根据指定字段的内容按照默认规则排序
比如说我现在有这样一个表:
id | level | name |
2 | 中 | 刘德华 |
3 | 低 | 张惠妹 |
1 | 高 | 陈冠希 |
可以使用下面的语句来自定义排序规则(按照高中低的顺序)
SELECT * FROM stars ORDER BY ( CASE level WHEN '高' THEN 3 WHEN '中' THEN 2 ELSE 1 END ) ASC
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
MYSQL METADATA LOCK(MDL LOCK) 理论及加锁类型测试
这篇文章主要介绍了MYSQL METADATA LOCK(MDL LOCK)的内容,有理论知识和加锁类型测试的以下代码,感兴趣的朋友请参考下午文2021-09-09mysql数据库中的information_schema和mysql可以删除吗?
这篇文章主要介绍了mysql数据库中的information_schema和mysql可以删除吗这个问题,需要的朋友可以参考下2014-05-05Windows Server 2003下修改MySQL 5.5数据库data目录
这篇文章主要介绍了Windows Server 2003下修改MySQL 5.5数据库data目录,需要的朋友可以参考下2016-04-04MySQL无GROUP BY直接HAVING返回空的问题分析
这篇文章主要介绍了MySQL无GROUP BY直接HAVING返回空的问题分析,学习MYSQL需要注意这个问题2013-11-11
最新评论