| 子句 | 用途 | 關鍵限制 |
|---|---|---|
| ORDER BY | 結果集排序 | 預設 ASC;需明確列出排序欄位,可多欄位 |
| GROUP BY | 分群彙總 | 需搭配聚合函數;SELECT 非聚合欄位必須出現在 GROUP BY 列表 |
| HAVING | 群組過濾 | 在 GROUP BY 之後、ORDER BY 之前;可使用聚合函數 |
SELECT select_list
FROM table_source
WHERE search_condition
GROUP BY group_by_expression
HAVING search_condition
ORDER BY order_expression
SELECT 清單中未使用聚合函數的欄位,必須出現在 GROUP BY 之後。
錯誤範例:
SELECT A, B FROM tbl GROUP BY A; -- B 未聚合也未分群
正確寫法:
SELECT A, COUNT(B) AS cnt FROM tbl GROUP BY A;
-- 正確:HAVING 使用聚合
SELECT A, COUNT(B) FROM tbl GROUP BY A HAVING COUNT(B) > 2;
WHERE 於結果集產生前執行,HAVING 於結果集產生後迴圈處理,能用 WHERE 解決的絕不使用 HAVING。