ORDER BY 排序

ORDER BY 用來將查詢結果依指定欄位排序。

語法

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;
  • ASC:由小到大(預設)
  • DESC:由大到小

基本用法

假設有一個 products 資料表:

idnameprice
1商品A300
2商品B150
3商品C500

依價格由低到高排序:

SELECT * FROM products ORDER BY price;
-- 或
SELECT * FROM products ORDER BY price ASC;

結果:

idnameprice
2商品B150
1商品A300
3商品C500

依價格由高到低排序:

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 FIRSTNULLS LAST 指定
-- PostgreSQL
SELECT * FROM products
ORDER BY price DESC NULLS LAST;