ORDER BY 排序
ORDER BY 用來將查詢結果依指定欄位排序。
語法
SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;
ASC:由小到大(預設)DESC:由大到小
基本用法
假設有一個 products 資料表:
| id | name | price |
|---|---|---|
| 1 | 商品A | 300 |
| 2 | 商品B | 150 |
| 3 | 商品C | 500 |
依價格由低到高排序:
SELECT * FROM products ORDER BY price;
-- 或
SELECT * FROM products ORDER BY price ASC;
結果:
| id | name | price |
|---|---|---|
| 2 | 商品B | 150 |
| 1 | 商品A | 300 |
| 3 | 商品C | 500 |
依價格由高到低排序:
SELECT * FROM products ORDER BY price DESC;
多欄位排序
可以指定多個排序欄位,先依第一個欄位排序,相同時再依第二個欄位:
SELECT * FROM employees
ORDER BY department ASC, salary DESC;
這會先依部門排序,同部門再依薪水由高到低排序。
使用欄位順序
可以用 SELECT 中欄位的順序來指定排序:
SELECT name, price, stock FROM products
ORDER BY 2 DESC; -- 依第 2 個欄位 (price) 排序
搭配 LIMIT
排序後取前幾筆,常用於「取得最高/最低的 N 筆」:
-- 取得價格最高的 5 個商品
SELECT * FROM products
ORDER BY price DESC
LIMIT 5;
NULL 值的排序
不同資料庫對 NULL 值的排序位置不同:
- MySQL:ASC 時 NULL 在最前面,DESC 時在最後面
- PostgreSQL:可以用
NULLS FIRST或NULLS LAST指定
-- PostgreSQL
SELECT * FROM products
ORDER BY price DESC NULLS LAST;