问题(一):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. linux awk,sort,uniq,wc,cut命令详解

    1.awk awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 $ 表示当前行 $ 表示第一列 NF 表示一共有多少列 $NF 表示最 ...

  2. DS01--抽象数据类型

    一.作业内容 二.数据结构.函数说明 1.头文件 common.h 2.数据结构 Rational.h 三.代码实现说明 1.构造有理数T 2.销毁有理数T 3.e返回有理数的分子或分母 4.用e改变 ...

  3. this & super

    /* 当本类的成员和局部变量同名用this区分. 当子父类中的成员变量同名用super区分父类.   this和super的用法很相似.   this:代表一个本类对象的引用. super:代表一个父 ...

  4. 复利计算器Junit单元测试

    一.测试场景 测试模块 测试输入 预期结果 运行结果 bug跟踪 复利计算 (本金,利率,年限,次数) 终值     测试运算结果 (100,5,3,1) 115.76 115.76   测试输入负数 ...

  5. 微信获取 openid 静默及非静默

    <?php /* 需要的微信公众号配置信息 APPID : 绑定支付的APPID APPSECRET : 公众帐号secert */ class Index { // 配置账号信息 privat ...

  6. phpcms 发布时间 更新 时间

  7. [翻译]API Guides - Layouts

    官方文档地址:http://developer.android.com/guide/topics/ui/declaring-layout.html PS:API Guides里面的内容不免都简单些,翻 ...

  8. IE 代理服务器设置程序实现

    IE 代理服务器设置程序实现 分类: Delphi2003-08-02 18:42 1398人阅读 评论(0) 收藏 举报 服务器ieinternetstringconstructordelphi 本 ...

  9. 在Delphi中动态地使用SQL查询语句 Adoquery sql 参数 冒号

    在Delphi中动态地使用SQL查询语句 在一般的数据库管理系统中,通常都需要应用SQL查询语句来提高程序的动态特性.下面介绍如何在Delphi中实现这种功能.在Delphi中,使用SQL查询语句的途 ...

  10. jenkins配置slave节点 构建项目并执行操作

    1.新建与配置结点 [系统管理]-> [管理结点]-> [新建结点] 2.配置slave 说明: Name: 定义slave的唯一名称标识,可以是任意字符串,通常设置为slave主机名.i ...