首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL 排序、分組、統計 10 大進階技巧

     編輯:MySQL 資料庫相關知識

1. ORDER BY 基礎排序

字母/數字序,相似值相鄰。僅為顯示順序,非真正分組。

2. GROUP BY 去重與分組

同值僅顯示一列。SELECT ZIP FROM Customers GROUP BY ZIP 回傳唯一郵遞區號。
限制:SELECT 清單必須包含 GROUP BY 欄位或聚合函數;不支援別名;不自動排序(需加 ORDER BY)。

3. WHERE 先於 GROUP BY 過濾

SELECT ZIP FROM Customers WHERE State='KY' GROUP BY ZIP;

WHERE 在分組前過濾列,不支援聚合函數。

4. GROUP BY ALL 保留所有分組

SELECT ZIP, COUNT(ZIP) AS KYCustomers FROM Customers 
WHERE State='KY' GROUP BY ALL ZIP;

非 KY 州的 ZIP 仍會出現,聚合值為 0。遠端查詢不支援。

5. HAVING 分組後過濾

SELECT ZIP, COUNT(ZIP) AS Cnt FROM Customers 
GROUP BY ZIP HAVING COUNT(ZIP) = 1;

僅保留符合聚合條件的分組。口訣:WHERE 過濾列,HAVING 過濾分組。

6. WHERE vs HAVING 執行順序

  • WHERE → GROUP BY → HAVING
  • 先分組再過濾聚合結果用 HAVING。

7. 聚合函數進階

  • COUNT(DISTINCT col):去重計數。
  • SUM/CASE WHEN:條件聚合(如各狀態筆數)。
  • GROUPING SETS / ROLLUP / CUBE:多維度小計(SQL Server/Oracle/PostgreSQL)。

8. 窗口函數

ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ...)、RANK()、NTILE() 解決 Top-N per group、分頁、百分位等複雜統計。

9. 分組集合與多維分析

GROUP BY GROUPING SETS ((a,b), (a), ()) 一次查詢產出多層級彙總。

10. 統計資訊與查詢優化

及時更新統計資訊(UPDATE STATISTICS/ANALYZE TABLE),優化器才能為 GROUP BY/ORDER BY 選擇最佳執行計畫(Hash Aggregate vs Sort Aggregate)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved