在查询生成输出表之后,也就是在处理完选择列表之后,你还可以对输出表进行排序。

如果没有排序,那么行将以不可预测的顺序返回(实际顺序将取决于扫描和连接规划类型和在磁盘上的顺序,

但是肯定不能依赖这些东西)。确定的顺序只能在明确地使用了排序步骤之后才能保证。

ORDER BY子句用于声明排序顺序:

SELECT _select_list_
FROM _table_expression_
ORDER BY _sort_expression1_ [ASC | DESC] [NULLS { FIRST | LAST }]
[, `_sort_expression2_` [ASC | DESC] [NULLS { FIRST | LAST }] ...]

sort_expression 是任何可用于选择列表的表达式,可以将不同列相加减乘除后排序,例如:

SELECT a, b FROM table1 ORDER BY a + b, c;

如果指定了多个排序表达式,那么仅在前面的表达式排序相等的情况下才使用后面的表达式做进一步排序。

每个表达式都可以跟一个可选的ASC(升序,默认) 或DESC(降序)以设置排序方向。 升序先输出小的数值,这里的"小"是以<操作符的角度定义的。

类似的是,降序是以>操作符来判断的。

NULLS FIRSTNULLS LAST选项可以决定在排序操作中在 non-null 值之前还是之后。

默认情况下,空值大于任何非空值;也就是说,DESC 排序默认是NULLS FIRST,否则为NULLS LAST

注意,排序选项对于每个排序列是相对独立的。例如ORDER BY x, y DESC 意思是说ORDER BY x ASC, y DESC

不同于ORDER BY x DESC, y DESC

一个_sort_expression_也可以是字段名或字段编号,如:

SELECT a + b AS sum, c FROM table1 ORDER BY sum;
SELECT a, max(b) FROM table1 GROUP BY a ORDER BY ;

都按照第一个字段进行排序。

需要注意的是,输出字段名必须是独立的(不允许在表达式中使用)。

比如,下面的语句是错误的:

SELECT a + b AS sum, c FROM table1 ORDER BY sum + c;          -- 错误的

这样的限制主要是为了避免歧义。另外,如果某个排序表达式能够同时匹配输出字段名和表表达式中的字段名, 也会导致歧义(此时使用输出字段名)。

当然,这种情况仅在你使用了AS 重命名输出字段并且恰好与其它表的字段同名的时候才会发生。

ORDER BY可以应用于UNIONINTERSECT,EXCEPT 组合的计算结果,

不过在这种情况下,只允许按照字段的名字或编号进行排序,而不允许按照表达式进行排序。

Notes

[1] 事实上,PostgreSQL使用默认的B-tree操作符类 为表达式的数据类型确定ASCDESC排序顺序。

一般来说,数据类型将被转换为适合于 <和 >操作符进行排序。但是对于用户自定义的数据类型可以不必如此。

最新文章

  1. 2016huasacm暑假集训训练三 F - Jungle Roads
  2. Java设计模式-观察者模式(Observer)
  3. iOS多线程编程Part 1/3 - NSThread & Run Loop
  4. A过的题目
  5. css 嵌套 元素所属类别
  6. const关键字与指针
  7. c#委托与事件(详解)
  8. Axure 入门学习
  9. linux下安装python3(转)
  10. PhoenixFD插件流体模拟——UI布局【Output】详解
  11. win7下Oracle库impdp导入dmp
  12. H5即时通讯Websocket
  13. c# 操作文本文件
  14. keras backend的修改
  15. OPENSTACK重装系统失败导致虚拟机状态为error
  16. AQS源码分析
  17. Spring AsyncRestTemplate
  18. Java下LDAP操作的资料
  19. SpringMVC(1)
  20. Cordova in VisualStudio Code

热门文章

  1. System Center Configuration Manager 2016 必要条件准备篇(Part1)
  2. 关于Vue生命周期的小记录
  3. java Vamei快速教程07 包
  4. Android多媒体框架总结(1) - 利用MediaMuxer合成音视频数据流程分析
  5. 【BZOJ2243】[SDOI2011] 染色(树链剖分)
  6. 使用POI解析Excel文件
  7. preprocessing MinMaxScaler
  8. 学习笔记 | java反序列化漏洞分析
  9. 基于supersocket、C#对JT808协议进行解析构建gps监控平台服务端
  10. 软件杯python-flask遇到的坑有感!