GROUP BY 先分組聚合,ORDER BY 再對**結果集**排序。兩者可直接組合,ORDER BY 可使用聚合函數別名或位置編號。
SELECT
BaoBeiName,
COUNT(*) AS SalesCount
FROM Sale
GROUP BY BaoBeiName
ORDER BY COUNT(*) DESC; -- 或 ORDER BY SalesCount DESC / ORDER BY 2 DESC
SELECT
BaoBeiName,
SUM(Price) AS TotalAmount
FROM Sale
GROUP BY BaoBeiName
ORDER BY SUM(Price) DESC; -- 或 ORDER BY TotalAmount DESC
| 規則 | 說明 |
|---|---|
| 執行順序 | FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY |
| ORDER BY 可用 | SELECT 列表中的別名、聚合函數、位置編號 (1-based) |
| 不可用 | SELECT 列表以外的欄位 (除非也在 GROUP BY 中) |
| NULL 排序 | ASC 時 NULL 排最前;DESC 時排最後 |
SELECT
Category,
ProductName,
COUNT(*) AS Cnt,
SUM(Amount) AS Total
FROM Sales
GROUP BY Category, ProductName
ORDER BY
Category ASC, -- 第一層:類別升冪
Total DESC, -- 第二層:同類別內總額降冪
Cnt DESC; -- 第三層:總額相同時筆數降冪