SELECT column_name1, aggregate_function(column_name2)
FROM table_name
[WHERE row_level_condition]
[GROUP BY column_name1]
HAVING aggregate_function_condition;
| 子句 | 作用階段 | 可用運算元 | 典型用途 |
|---|---|---|---|
| WHERE | 分組前(列層級) | 資料欄位、常數、純量函數 | 過濾原始列 |
| HAVING | 分組後(群組層級) | 彙總函數(SUM, COUNT, AVG...)、GROUP BY 欄位 | 過濾群組統計結果 |
表 Store_Information (store_name, sales)
SELECT store_name, SUM(sales) AS total_sales
FROM Store_Information
GROUP BY store_name
HAVING SUM(sales) > 1500;
結果:
store_name total_sales Los Angeles 1800
HAVING SUM(sales) > 1000 AND COUNT(*) > 5HAVING 等同對全表彙總結果篩選(罕見)。WHERE 盡早過濾列,減少參與分組的資料量。GROUP BY 排序/雜湊。HAVING 使用複雜純量子查詢,考慮改用 CTE/臨時表預先計算。