问题(一):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. ionic 开发实例

    ionic 开发实例 一.ionic初始化项目 1:安装ionic npm install -g ionic 2:初始化项目框架 我们可以用命令创建一个应用程序,可以使用我们的一个现成的应用程序模板, ...

  2. 0421--"数字口袋精灵app"二次开发(Blackbriar团队开发)

    "数字口袋精灵app"二次开发 目录: 一.项目github总仓库推送 二.开发成员 三.分工与合作 四.各模块成果 五.心得墙 六.团队成员贡献分 内容: 一.项目github总 ...

  3. Python:三元运算

    result=值1 if 条件 else 值2 如果条件为真,result=值1 如果条件为假,result=值2 例子: a,b,c=1,3,5 d=a if a>b else c print ...

  4. 软工1816 · Alpha冲刺(7/10)

    团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 学会了POSTMAN的使用,对后端已经完成的接口进行了收发消息正确性的验证 推 ...

  5. Log4Net的使用研究(一)

    等待研究中………… 20160421 标题:C#使用Log4Net记录日志   文章地址: http://www.cnblogs.com/wangsaiming/archive/2013/01/11/ ...

  6. BETA阶段冲刺

    1.介绍小组新加入的成员,Ta担任的角色 新成员 担任工作 江鹭涛 前端设计 2.讨论是否需要更换团队的PM 不需要,上阶段配合不错,这阶段继续努力 3.下一阶段需要改进完善的功能 服务器并发处理,界 ...

  7. 0512 SCRUM团队项目3.0

    题目 SCRUM 流程的步骤2: Spring 计划 1. 确保product backlog井然有序.(参考示例图1) 2. Sprint周期,一个冲刺周期,长度定为两周,本学期还有三个冲刺周期. ...

  8. HashMap和HashTable源码分析

    HashMap HashMap是一个实现了Map接口的Hash表.提供所有Map的操作,并且允许null key和null value.HashMap几乎等同于HashTable,只不过HashMap ...

  9. HDU4786_Fibonacci Tree

    题目很新颖的,略带智商,很好. 题目的意思是给你一些白色边和黑色边,现在问你能否用两色边构造出一颗生成树,且树中白色边的数量为一个Fibonacci数. 其实在没做题目之前我就已经听说了这个题目的解题 ...

  10. 【HLSDK系列】怎么增加一种新实体

    你平常肯定接触到很多比如 info_player_start hostage info_target 之类的实体,这里就解释一下怎么创建一种新的实体. 首先建立一个新的 .h 文件(当然你写在现有的文 ...