问题(一):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. Beta阶段第三次网络会议

    Beta阶段第三次网络会议 第二次会议问题解决情况 不同等级城堡不同图片,移动动画解决,阴影效果添加 小地图信息添加城堡和士兵信息 新AI设计失败,在存在科技树的情况下,如果将所有可能操作全部纳入考虑 ...

  2. 通俗理解Hilbert希尔伯特空间

    作者:qang pan 链接:https://www.zhihu.com/question/19967778/answer/28403912 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权, ...

  3. 第二次c++作业(觉得渐渐入门系列)

    其实说实话,我还是不敢很确定地说面向对象和面向过程这两种语言,我确实能分得开,但是我觉得倒是比以前好很多了.//(大概是谈了对象,知道了什么是面向对象编程) 1.从个人角度来说, a:面向过程就是-- ...

  4. HDU 5191 Building Blocks

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5191 bc(中文):http://bestcoder.hdu.edu.cn/contests ...

  5. rabbitmqctl 的常用命令

    # 查看服务器的状态 rabbitmqctl status   # 查看环境变量 rabbitmqctl environment   # 停止rabbitmq的应用 rabbitmqctl stop_ ...

  6. 此时本机的BootLoader程序坏了,也就是说grub第一阶段坏掉了,该如何修复

    方法一:直接安装grub (1)先把MBR拷贝一份 dd if=/dev/sda of=/tmp/mbr count=1 bs=512   (2)然后再破坏 dd if=/dev/zero of=/d ...

  7. 新手必备!11个强大的 Visual Studio 调试技巧

    简介 调试是软件开发周期中很重要的一部分.它具有挑战性,同时也很让人疑惑和烦恼.总的来说,对于稍大一点的程序,调试是不可避免的.最近几年,调试工具的发展让很多调试任务变的越来越简单和省时. 这篇文章总 ...

  8. LoadRunner录制用户操作

    先说明一点,使用录制的手段拿到的测试脚本和工程师自己编写的测试脚本其实是一样的,不要觉得录制的方式low,而自己编写脚本就显得高大上,这是不对的.除非工程师本身对开发们写的代码逻辑很熟,对业务上的各个 ...

  9. [Code Festival 2017 qual A] C: Palindromic Matrix

    题意 给出一个小写字母组成的字符矩阵,问能否通过重排其中的字符使得每行每列都是回文串. 分析 简化版:给出一个字符串,问能否通过重排其中的字符使得它是回文串.那么如果字符串长度为偶数,就需要a到z的个 ...

  10. 秒杀多线程第七篇 经典线程同步 互斥量Mutex(续)

    java使用Synchronized关键字实现互斥,而同时有Lock支持. 这两个的效果是等同的,Synchronized性能的起伏较大,而lock比较收敛. 为了代码的可读性,Synchronize ...