Manon.icu

I'm here to make you a better developer by teaching you everything I know about building for the web.

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表示降序。

yG7vz7

示例

xASUui

查询所有的用户,并按照 first_name 升序排序。

SELECT
	first_name,
	last_name
FROM
	customer
ORDER BY
	first_name ASC;

ASC是默认排序选项,可以省略。

7o64EZ

查询所有的用户,并按照 last_name 降序排序。

SELECT
       first_name,
       last_name
FROM
       customer
ORDER BY
       last_name DESC;

3LKS1G

对多列排序

SELECT
	first_name,
	last_name
FROM
	customer
ORDER BY
	first_name ASC,
	last_name DESC;

dIhgSP

表达式排序

SELECT
	first_name,
	LENGTH(first_name) len
FROM
	customer
ORDER BY
	len DESC;

选择名字,并按照名字的长度进行降序排序。

tBVsSu

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;

bPfLc9

可以看到默认返回排序将 null 值放到最后,如果想改变这种默认的排序,可以使用NULLS FIRSTNULLS LAST

SELECT num
FROM sort_demo
ORDER BY num NULLS FIRST;

EpgCHF

翻转顺序

SELECT num
FROM sort_demo
ORDER BY num DESC NULLS LAST;

tkksL2

总结

  • 排序的字段可以是一个表的列,也可以是一个表达式。
  • 使用ASCDESC指定排序顺序。
  • 使用NULLS FIRSTNULLS LAST指定排序的 NULL 值优先级。

Comments

No Comments!