SELECT * INTO new_table FROM source_table WHERE condition;
| 子句 | 使用時機 | 執行順序 |
|---|---|---|
| WHERE | 分組**前**過濾列 (無 GROUP BY 時也用 WHERE) | FROM → WHERE → GROUP BY |
| HAVING | 分組**後**過濾群組 (必須搭配 GROUP BY) | GROUP BY → HAVING → SELECT |
記憶口訣:「有 GROUP BY 用 HAVING,無 GROUP BY 用 WHERE。」
UNION 去重,UNION ALL 保留重複 (效能較好)。-- 全彙總附加在結果集最後一列
SELECT id, amount FROM sales ORDER BY id COMPUTE SUM(amount);
-- 分組彙總:每組產生兩個結果集 (明細 + 彙總單列)
SELECT id, amount FROM sales ORDER BY region COMPUTE SUM(amount) BY region;
ORDER BY 使用。GROUP BY、ROLLUP、GROUPING SETS 或應用層計算。-- 取代 COMPUTE BY
SELECT region, id, amount,
SUM(amount) OVER (PARTITION BY region) AS region_total
FROM sales
ORDER BY region, id;
-- 或使用 GROUPING SETS
SELECT region, id, SUM(amount) AS total
FROM sales
GROUP BY GROUPING SETS ((region, id), (region), ())
ORDER BY region, id;