问题(一):Order By 多个参数排序

在做多字段的排序的时候我们经常会会用到该语句。

所以多参数排序是从左到右的局部排序,修改的范围只有前面参数(几个参数)相同的情况下在排序。

select * from table order by  参数1 , 参数2 DESC …… limit ?

在做多字段的排序的时候我们经常会会用到该语句。

这里的参数1 是按照 ASC 排序所以就可以省略,参数2 是按照DESC排序,由于

大多数 where 后面的过滤条件是从右到左,而Order by后面的顺序应该怎么的?

这里的顺序是从参数1,参数2这么开始排序的,是从左到右。

比如:把参数1的排完,在排序参数2,但参数2的排序并非对参数1的数据重新排序,

而是对参数1相同的数据进行排序。

误解:

很多人想得到100个最小的x,但想把这100个数据按照y从小到大的排序,于是就写这样

的SQL语句

select * from table x ASC,y DESC  limit 100

这就是我们理解错了,这里的y只是对排好的x相同的数据进行排序,如果这100个数据x完全

不同,后面添加对y的排序时是没有影响的。这里只对x相同的数据进行局部的y排序。

变化如下:

1-2          1-2

2-1          2-3

2-3          2-1

3-4          3-4

……

所以多参数排序是从左到右的局部排序,修改的范围只有前面参数(几个参数)相同的情况下在排序。

比如:ORDER BY h.floor*1,convert(h.floor using gbk) asc

图解:

问题(二):Order By 根据 IF 条件对字段进行排序

比如:ORDER BY IF(a.state = '1',0,1),a.update_date DESC

图解:

同理可得:不同条件下都可以通过 IF 来对字段进行排序

【Oracle 结论】 

order by colum asc 时,null默认被放在最后

order by colum desc 时,null默认被放在最前

nulls first 时,强制null放在最前,不为null的按声明顺序[asc|desc]进行排序(select update_date from table_name order by update_date nulls first;)

nulls last 时,强制null放在最后,不为null的按声明顺序[asc|desc]进行排序(select update_date from table_name order by update_date nulls last;)

【MySql 结论】

order by colum asc 时,null默认被放在最前

order by colum desc 时,null默认被放在最后

ORDER BY IF(ISNULL(update_date),0,1)    null被强制放在最前,不为null的按声明顺序[asc|desc]进行排序

ORDER BY IF(ISNULL(update_date),1,0)    null被强制放在最后,不为null的按声明顺序[asc|desc]进行排序

问题(三):Order By 字母数字混合字段排序问题

对MySQL数据表里的一个字符型字段排序,其内容格式为一位字母+顺序数字。数字没有前导零,长度不固定。

这种含字母的数字序列,排序出来的结果和我们想要的结果是不一样的,因为它不是纯数字,只能按字符规则排。

结果是A1,A10,A11,A12。。。。A19,A2,A20,A21。。。。

而不是我们通常感觉中的A1,A2,A3,。。。。。A10,A11,这样的结果。

想要得到正确的排序有两个办法。

一是改变字段内容结构,在数字前加上零,让所有的字段值拥有相同的长度。

二是不改变字段内容,在排序的SQL语句上想办法。



order by mid(column,2,10) +1



mid()第一个参数是字串内容,可以是字段名。第二个参数是起始字符的位置,我这里需要从第二个字符开始。第三个参数是需要取得的长度,要选一个可以包含所有字段内容长度的值,宁大勿小。

但这样取出来的还只是“数字内容的字符串”,对它排序仍然使用字符规则,不会得到我们想要的结果。

这时需要给这个结果再加上一个数值,让MySQL对它进行一次算术运算,然后得到的就是一个整型值,这时再排序就是数字顺序的结果了。

例如:

SELECT * FROM equipmentmes ORDER BY MID(eqid,2,10) +1

Order By 问题集合的更多相关文章

  1. redis:order set有序集合类型的操作(有序集合)

    1. order set有序集合类型的操作(有序集合) 有序集合是在无序集合的基础上加了一个排序的依据,这个排序依据叫score,因此声明一个集合为有序集合的时候要加上score(作为排序的依据) 1 ...

  2. Redis 之order set有序集合结构及命令详解

    1.zadd key score1 value1 score2 value2  添加元素 2.zrem key value1 value2 ..  删除集合中的元素 3.zremrangebyscor ...

  3. LINQ to SQL语句之Join和Order By

    Join操作 适用场景:在我们表关系中有一对一关系,一对多关系,多对多关系等.对各个表之间的关系,就用这些实现对多个表的操作. 说明:在Join操作中,分别为Join(Join查询), SelectM ...

  4. 【Java重构系列】重构31式之封装集合

    2009年,Sean Chambers在其博客中发表了31 Days of Refactoring: Useful refactoring techniques you have to know系列文 ...

  5. 点评阿里JAVA手册之编程规约(OOP 规约 、集合处理 、并发处理 、其他)

    下载原版阿里JAVA开发手册  [阿里巴巴Java开发手册v1.2.0] 本文主要是对照阿里开发手册,注释自己在工作中运用情况. 本文难度系数为三星(★★★) 本文为第二篇 第一篇 点评阿里JAVA手 ...

  6. Redis set集合结构及命令详解

    set 无序集合 集合的性质: 唯一性,无序性,确定性 注: 在string和link的命令中,可以通过range 来访问string中的某几个字符或某几个元素 但,因为集合的无序性,无法通过下标或范 ...

  7. 阿里巴巴Java开发手册-集合处理

    1. [强制]关于 hashCode 和 equals 的处理,遵循如下规则:      1) 只要重写 equals ,就必须重写 hashCode .      2) 因为 Set 存储的是不重复 ...

  8. LINQ体验(6)——LINQ to SQL语句之Join和Order By

    Join操作 适用场景:在我们表关系中有一对一关系,一对多关系.多对多关系等.对各个表之间的关系,就用这些实现对多个表的操作. 说明:在Join操作中.分别为Join(Join查询), SelectM ...

  9. How to: Calculate a Property Value Based on Values from a Detail Collection 如何:基于详细信息集合中的值计算属性值

    This topic describes how to implement a business class, so that one of its properties is calculated ...

随机推荐

  1. Tomcat配置 —— server.xml

    Tomcat的核心组件是servlet容器. Tomcat各个组件之间的嵌套关系 server.xml配置如下: <Server port="8005" shutdown=& ...

  2. sleep(),wait(),yield(),notify()

    sleep(),wait(),yield() 的区别 sleep方法和yield方法是Thread类的方法,wait方法是Object的方法. sleep 方法使当前运行中的线程睡眼一段时间,进入不可 ...

  3. 第七次java作业

     interface Pet{public String getName();public String getColor();public int getAge();}class Cat imple ...

  4. maven 添加tomcat依赖

    https://my.oschina.net/angel243/blog/178554

  5. windows远程连接设置

    1.设置整个服务器只允许一个连接. 使用组策略管理gpedit.msc, 计算机配置>管理模板>windows组件 >终端服务>限制连接数量,设为已启动,数量设置为1. 此设置 ...

  6. saltstack基础篇

    使用saltstack的前提是PPT      服务.流程.工具和技术 安装 rpm -Uvh http://mirrors.yun-idc.com/epel/6Server/x86_64/epel- ...

  7. 只要实现了annotation这个接口就是注解 同理:只要实现了某个接口就是该类型的实现类

    只要实现了annotation这个接口就是注解  同理:只要实现了某个接口就是该类型的实现类

  8. 对于最近的一些日常总结by520(17.10.18)

    ---天天考试,各种题型都有,学到了很多新的知识,也发现了自己的许多不足---1.首先,自己的搜索需要加强,特别是广搜,10.18的T1裸广搜没有做对.2.数学的思维和一些逻辑问题需要加强,然后就是要 ...

  9. hive 一次性命令

    1.用hive查询,而不进入hive cli,查询后的值可以保存到文件中 #使用参数-e [hadoop@bigdata-senior01 ~]$ hive -e "select * fro ...

  10. py2exe使用总结

    假如你用python写了个小程序,想给别人用或者给别人演示,但他电脑里没装python.wxpython等,这时候你可以试试py2exe,它是一个将python脚本转换成windows上的可执行程序( ...