Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > sql使用order by实现排序出错

关于在sql中使用order by实现排序出错问题

作者:牧野风凉

这篇文章主要介绍了关于在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会根据指定字段的内容按照默认规则排序

比如说我现在有这样一个表:

idlevelname
2刘德华
3张惠妹
1陈冠希

可以使用下面的语句来自定义排序规则(按照高中低的顺序) 

SELECT
	*
FROM
	stars
ORDER BY
	(
		CASE level
		WHEN '高' THEN
			3
		WHEN '中' THEN
			2
		ELSE
			1
		END
	) ASC

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文