首页/数据/SQL 速查/排序中的 NULL 位置处理
本包目录(311 条)

排序中的 NULL 位置处理

NULL 在排序中的位置两库默认不同:MySQL 把 NULL 视为极小值(升序在前),PostgreSQL 视为极大值(升序在后),且只有 PG 支持 NULLS FIRST/LAST。

SQL 速查数据更新于 2026-10-12

PostgreSQL

PostgreSQL
SELECT * FROM t ORDER BY col ASC  NULLS LAST;
SELECT * FROM t ORDER BY col DESC NULLS FIRST;

MySQL 变通

MySQL 变通
-- 升序时把 NULL 排到最后
SELECT * FROM t ORDER BY col IS NULL, col ASC;

-- 或者用 CASE
SELECT * FROM t ORDER BY CASE WHEN col IS NULL THEN 1 ELSE 0 END, col;
MySQL 默认NULL 视为极小值:升序在前、降序在后;不支持 NULLS FIRST/LAST 语法
PostgreSQL 默认NULL 视为极大值:升序在后、降序在前;支持 NULLS FIRST/LAST

易错点

  • 从 MySQL 迁移到 PG 后排序输出的首尾行可能变化,报表对顺序敏感时显式加 NULLS 子句
  • MySQL 的 ORDER BY col IS NULL 依赖布尔转 0/1,写法略绕,注释写清意图防止被误改

数据来源与参考

  • MySQL 8.0 Reference Manual · ORDER BY
  • PostgreSQL Documentation · Sorting Rows
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌