SQLite Order By
我们已经能够灵活的使用各种条件筛选出我们想要的记录,但是这些记录顺序看起来杂乱无章,没有规律。我们想对记录进行排序,要怎么做呢?
SQLite 的 ORDER BY 子句可以对一个或多个列按升序或降序顺序排列数据
ORDER BY 子句在 SELECT 查询中的位置
在 SELECT 语句中, ORDER BY 子句放在 LIMIT 子句之前,其它所有的子句之后。
SELECT FROM WHERE GROUP BY HAVING ORDER BY LIMIT
ORDER BY 子句的基本语法
SELECT column-list FROM table_name [WHERE condition] [ORDER BY column1, column2, .. columnN] [ASC | DESC];
ASC 表示升序(有小到达) DESC 表示降序(由大到小)
可以在 ORDER BY 子句中使用多个列,但要确保使用的排序列在列清单中。
范例
假设我们的 company 表有以下记录:
sqlite> SELECT * FROM company; id name age address salary ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
1. 按照 salary 字段升序(有小到大)排序
sqlite> SELECT * FROM company ORDER BY salary ASC; id name age address salary ---------- ---------- ---------- ---------- ---------- 7 James 24 Houston 10000.0 2 Allen 25 Texas 15000.0 1 Paul 32 California 20000.0 3 Teddy 23 Norway 20000.0 6 Kim 22 South-Hall 45000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
2. 按照 salary 和 name 升序排序
如果有多个字段参与排序,SQLite 从左往右一个一个排序,如果第一个字段相同,则按照第二个字段排序,以此类推
因此,按照 salary 和 name 升序排序,就是先按照 salary 升序排序,salary 相同的再按照 name 排序。
id name age address salary ---------- ---------- ---------- ---------- ---------- 7 James 24 Houston 10000.0 2 Allen 25 Texas 15000.0 1 Paul 32 California 20000.0 3 Teddy 23 Norway 20000.0 6 Kim 22 South-Hall 45000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
3. 按照 salary 降序排序
sqlite> SELECT * FROM company ORDER BY salary DESC; id name age address salary ---------- ---------- ---------- ---------- ---------- 5 David 27 Texas 85000.0 4 Mark 25 Rich-Mond 65000.0 6 Kim 22 South-Hall 45000.0 1 Paul 32 California 20000.0 3 Teddy 23 Norway 20000.0 2 Allen 25 Texas 15000.0 7 James 24 Houston 10000.0