- 安装
- 文档
- 入门
- 连接
- 数据导入与导出
- 湖仓格式
- 客户端 API
- 概览
- 第三方客户端
- ADBC
- C
- C++
- CLI
- Dart
- Go
- Java (JDBC)
- Julia
- Node.js (已弃用)
- Node.js (Neo)
- ODBC
- PHP
- Python
- R
- Rust
- Swift
- Wasm
- SQL
- 介绍
- 语句
- 概览
- ANALYZE
- ALTER TABLE
- ALTER VIEW
- ATTACH 和 DETACH
- CALL
- CHECKPOINT
- COMMENT ON
- COPY
- CREATE INDEX
- CREATE MACRO
- CREATE SCHEMA
- CREATE SECRET
- CREATE SEQUENCE
- CREATE TABLE
- CREATE VIEW
- CREATE TYPE
- DELETE
- DESCRIBE
- DROP
- EXPORT 和 IMPORT DATABASE
- INSERT
- LOAD / INSTALL
- MERGE INTO
- PIVOT
- 性能分析
- SELECT
- SET / RESET
- SET VARIABLE
- SHOW 与 SHOW DATABASES
- SUMMARIZE
- 事务管理
- UNPIVOT
- UPDATE
- USE
- VACUUM
- 查询语法
- SELECT
- FROM 和 JOIN
- WHERE
- GROUP BY
- GROUPING SETS
- HAVING
- ORDER BY
- LIMIT 和 OFFSET
- SAMPLE
- 展开嵌套
- WITH
- WINDOW
- QUALIFY
- VALUES
- FILTER
- 集合操作
- 预处理语句
- 数据类型
- 表达式
- 函数
- 概览
- 聚合函数
- 数组函数
- 位字符串函数
- Blob 函数
- 日期格式化函数
- 日期函数
- 日期部分函数
- 枚举函数
- 间隔函数
- Lambda 函数
- 列表函数
- 映射函数
- 嵌套函数
- 数值函数
- 模式匹配
- 正则表达式
- 结构体函数
- 文本函数
- 时间函数
- 时间戳函数
- 带时区时间戳函数
- 联合函数
- 实用函数
- 窗口函数
- 约束
- 索引
- 元查询
- DuckDB 的 SQL 方言
- 示例
- 配置
- 扩展
- 核心扩展
- 概览
- 自动补全
- Avro
- AWS
- Azure
- Delta
- DuckLake
- 编码
- Excel
- 全文搜索
- httpfs (HTTP 和 S3)
- Iceberg
- ICU
- inet
- jemalloc
- Lance
- MySQL
- PostgreSQL
- 空间
- SQLite
- TPC-DS
- TPC-H
- UI
- Unity Catalog
- Vortex
- VSS
- 指南
- 概览
- 数据查看器
- 数据库集成
- 文件格式
- 概览
- CSV 导入
- CSV 导出
- 直接读取文件
- Excel 导入
- Excel 导出
- JSON 导入
- JSON 导出
- Parquet 导入
- Parquet 导出
- 查询 Parquet 文件
- 使用 file: 协议访问文件
- 网络和云存储
- 概览
- HTTP Parquet 导入
- S3 Parquet 导入
- S3 Parquet 导出
- S3 Iceberg 导入
- S3 Express One
- GCS 导入
- Cloudflare R2 导入
- 通过 HTTPS / S3 使用 DuckDB
- Fastly 对象存储导入
- 元查询
- ODBC
- 性能
- Python
- 安装
- 执行 SQL
- Jupyter Notebooks
- marimo Notebooks
- Pandas 上的 SQL
- 从 Pandas 导入
- 导出到 Pandas
- 从 Numpy 导入
- 导出到 Numpy
- Arrow 上的 SQL
- 从 Arrow 导入
- 导出到 Arrow
- Pandas 上的关系型 API
- 多个 Python 线程
- 与 Ibis 集成
- 与 Polars 集成
- 使用 fsspec 文件系统
- SQL 编辑器
- SQL 功能
- 代码片段
- 故障排除
- 术语表
- 离线浏览
- 操作手册
- 概览
- DuckDB 的占用空间
- 安装 DuckDB
- 日志
- 保护 DuckDB 安全
- 非确定性行为
- 限制
- DuckDB Docker 容器
- 开发
- 内部结构
- 站点地图
- 在线演示
ORDER BY 是一个输出修饰符。从逻辑上讲,它在查询的最后阶段(在 LIMIT 或 OFFSET 之前,如果存在的话)执行。ORDER BY 子句根据排序标准以升序或降序对行进行排序。此外,每个排序子句都可以指定 NULL 值应移动到开头还是结尾。
ORDER BY 子句可以包含一个或多个以逗号分隔的表达式。如果未包含任何表达式,则会抛出错误,因为在这种情况下应删除 ORDER BY 子句。这些表达式可以以任意标量表达式(可以是列名)、列位置编号(索引从 1 开始)或关键字 ALL 开头。每个表达式后都可以选择性地跟一个排序修饰符(ASC 或 DESC,默认为 ASC)和/或一个 NULL 排序修饰符(NULLS FIRST 或 NULLS LAST,默认为 NULLS LAST)。
ORDER BY ALL
ALL 关键字表示输出应按从左到右的每一列进行排序。可以使用 ORDER BY ALL ASC 或 ORDER BY ALL DESC 和/或 NULLS FIRST 或 NULLS LAST 来修改此排序的方向。请注意,ALL 不能与 ORDER BY 子句中的其他表达式结合使用——它必须单独使用。请参阅下方的示例。
NULL 排序修饰符
默认情况下,DuckDB 按 ASC 和 NULLS LAST 排序,即值按升序排列,NULL 值放在最后。这与 PostgreSQL 的默认排序顺序相同。可以通过以下配置选项更改默认排序顺序。
使用 default_null_order 选项将默认的 NULL 排序顺序更改为 NULLS_FIRST、NULLS_LAST、NULLS_FIRST_ON_ASC_LAST_ON_DESC 或 NULLS_LAST_ON_ASC_FIRST_ON_DESC
SET default_null_order = 'NULLS_FIRST';
使用 default_order 将默认排序方向更改为 DESC 或 ASC
SET default_order = 'DESC';
排序规则
默认情况下,文本使用二进制比较校对(collation)进行排序,这意味着值是根据其二进制 UTF-8 值进行排序的。虽然这对于 ASCII 文本(例如英语数据)效果很好,但对于其他语言,排序顺序可能不正确。为此,DuckDB 提供了校对功能。有关校对的更多信息,请参阅 校对(Collation)页面。
示例
所有示例均使用此示例表
CREATE OR REPLACE TABLE addresses AS
SELECT '123 Quack Blvd' AS address, 'DuckTown' AS city, '11111' AS zip
UNION ALL
SELECT '111 Duck Duck Goose Ln', 'DuckTown', '11111'
UNION ALL
SELECT '111 Duck Duck Goose Ln', 'Duck Town', '11111'
UNION ALL
SELECT '111 Duck Duck Goose Ln', 'Duck Town', '11111-0001';
选择地址,按城市名称排序,使用默认的 NULL 顺序和默认排序顺序
SELECT *
FROM addresses
ORDER BY city;
选择地址,按城市名称降序排序,null 值排在最后
SELECT *
FROM addresses
ORDER BY city DESC NULLS LAST;
先按城市排序,再按邮政编码排序,均使用默认排序规则
SELECT *
FROM addresses
ORDER BY city, zip;
使用德语校对规则按城市排序
SELECT *
FROM addresses
ORDER BY city COLLATE DE;
ORDER BY ALL 示例
按从左到右的顺序(先按地址,再按城市,最后按邮编)升序排列
SELECT *
FROM addresses
ORDER BY ALL;
| 地址 | 城市 | 邮编 |
|---|---|---|
| 111 Duck Duck Goose Ln | Duck Town | 11111 |
| 111 Duck Duck Goose Ln | Duck Town | 11111-0001 |
| 111 Duck Duck Goose Ln | DuckTown | 11111 |
| 123 Quack Blvd | DuckTown | 11111 |
按从左到右的顺序(先按地址,再按城市,最后按邮编)降序排列
SELECT *
FROM addresses
ORDER BY ALL DESC;
| 地址 | 城市 | 邮编 |
|---|---|---|
| 123 Quack Blvd | DuckTown | 11111 |
| 111 Duck Duck Goose Ln | DuckTown | 11111 |
| 111 Duck Duck Goose Ln | Duck Town | 11111-0001 |
| 111 Duck Duck Goose Ln | Duck Town | 11111 |