Published 2022-06-01
Postgresql - Order by
查询结果是无序的或者按照 id 排序的,如果需要按照某个字段排序,可以使用 order by 语句。
语法
SELECT
select_list
FROM
table_name
ORDER BY
sort_expression1 [ASC | DESC],
...
sort_expressionN [ASC | DESC];
- 首先需要在
ORDER BY
后面指定排序的字段和排序表达式,每个字段之间用逗号分隔。 - 如果没有指定排序的字段,则默认按照 id 排序。
ASC
表示升序,DESC
表示降序。
示例
查询所有的用户,并按照 first_name 升序排序。
SELECT
first_name,
last_name
FROM
customer
ORDER BY
first_name ASC;
ASC
是默认排序选项,可以省略。
查询所有的用户,并按照 last_name 降序排序。
SELECT
first_name,
last_name
FROM
customer
ORDER BY
last_name DESC;
对多列排序
SELECT
first_name,
last_name
FROM
customer
ORDER BY
first_name ASC,
last_name DESC;
表达式排序
SELECT
first_name,
LENGTH(first_name) len
FROM
customer
ORDER BY
len DESC;
选择名字,并按照名字的长度进行降序排序。
NULL
NULL
是一个标记,表示丢失的数据或记录时数据未知。
对包含NULL
行进行排序时,可以使用指定的排序表达式进行排序,比如:
ORDER BY sort_expresssion [ASC | DESC] [NULLS FIRST | NULLS LAST]
NULL FIRST
表示 NULL 值优先,NULL LAST
表示 NULL 值后来优先。
首先创建个表
-- create a new table
CREATE TABLE sort_demo(
num INT
);
-- insert some data
INSERT INTO sort_demo(num)
VALUES(1),(2),(3),(null);
查询并返回数据
SELECT num
FROM sort_demo
ORDER BY num;
可以看到默认返回排序将 null 值放到最后,如果想改变这种默认的排序,可以使用NULLS FIRST
或NULLS LAST
。
SELECT num
FROM sort_demo
ORDER BY num NULLS FIRST;
翻转顺序
SELECT num
FROM sort_demo
ORDER BY num DESC NULLS LAST;
总结
- 排序的字段可以是一个表的列,也可以是一个表达式。
- 使用
ASC
或DESC
指定排序顺序。 - 使用
NULLS FIRST
或NULLS LAST
指定排序的 NULL 值优先级。
Comments
No Comments!