order by 的那些事儿

order by 的那些事儿


order by就是按字段排序,这毋庸置疑,这次我遇到的问题呢,就是排序的字段是我自己定义的字符串的数据,然后,排序的结果不是我想要的,最后找到了处理办法,现在总结一下order by的使用方法。
首先是单一字段排序,然后是多字段排序。

单一字段排序

单一字段排序,第一步,要确认,排序字段的数据类型,一般,进行排序的数据,分为三大类:
1.数字类型:包括整数、小数、以及正负数,数字类型的排序,很简单,就是按数字的大小进行排序。
2.字符串类型:字符串类型是按 ascii码进行排序的。
3.日期类型:日期类型简单按日期进行排序。
举例:
数字类型:
在这里插入图片描述
按 int字段进行排序
在这里插入图片描述
这里有一个坑,就是,假如你要排序的字段是数字,但是以字符串的形式存储在数据库中,排序的结果就会出现问题:举例:
在这里插入图片描述
string_int 里面存的是数字,但是是以字符串的形式存储

SELECT * FROM orderbytest ORDER BY  string_int asc

执行结果:
在这里插入图片描述
此时,执行的结果是,按字符的排序,从左往右进行依次排序,结果是 1 10 11 12 … 2 20 21 …诸如此类。下面就要说字符串类型的排序。
字符串类型:
字符串类型也简单,就是按ascii码的值进行排序的,可以百度搜一下,ascii码表,然后就可以了解排序规则,字符串,是按单字符,从左往右依次排序。
百度百科:: link.ascii码
字符串类型里面,我遇到过的两个类型的问题,
第一:按中文的拼音顺序进行排序,这在对用户表,某些时候可以用户。
比如简单的 张三 李四 王五。如果直接进行排序,那么排序结果是按数据库设定的编码格式进行排序,一般我们数据库采用的都是 utf-8格式,如果需要按中文的拼音进行排序,就需要采用 gbk编码

在这里插入图片描述
默认编码排序结果:

SELECT * FROM orderbytest WHERE id>14 ORDER BY col_string

在这里插入图片描述
采用gbk的编码排序结果:

SELECT * FROM orderbytest WHERE id>14 ORDER BY CONVERT(col_string USING gbk)

在这里插入图片描述
第二:按指定的字符串顺序排序,直接举例:饼图统计结果数据:列是如此划分的:
统计企业船龄,<5年,5-15年,15-25年,>25年。如果要排序的话,不能达到自己想要的结果:此时,统计结果就是固定的这4个选项,排序的话, 就可以按固定的字段排序,
直接
select * from [统计结果] order by field(age,’<5年’,‘5-15年’,‘15-25年’,’>25年’);
按指定的字符串进行排序。

日期类型:
日期类型一般没有大的问题,直接书写即可

多字段排序

如果对单字段排序的理解比较清楚的情况下,多字段排序理解也就简单的,
当数据某个字段的数据是重复的情况下,比如按日期排序,某些数据是同一天产生的,所以,按日期排序后,同一天仍然有许多数据,需要再排序,选择第二个字段,再次排序
select * from [table] order by col_date,string_int
默认都是增序,也可以单独设定,哪个增序,哪个降序。
SELECT id,col_string,string_int,col_int,DATE_FORMAT(col_date,’%Y-%m-%d’) date from orderbytest ORDER BY DATE_FORMAT(col_date,’%Y-%m-%d’)asc,col_string DESC

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值