本文將介紹如何分組數據,以便能彙總表內容的子集,這涉及兩個新SELECT語句子句,分別是 GROUP BY 子句和 HAVING 子句。 1.1 創建分組 分組是在SELECT語句的GROUP BY子句中建立的。 輸入: 輸出: vend_id | num_prods | 1001 | 3 1002 ...
本文將介紹如何分組數據,以便能彙總表內容的子集,這涉及兩個新SELECT語句子句,分別是 GROUP BY 子句和HAVING子句。
1.1 創建分組
分組是在SELECT語句的GROUP BY子句中建立的。
輸入:
SELECT vend_id,COUNT(*) AS num_prods
FROM products
GROUP BY vend_id
輸出:
vend_id | num_prods |
---|---|
1001 | 3 |
1002 | 2 |
1003 | 7 |
1005 | 2 |
分析:上面的SELECT語句指定了兩個列,vend_id包含產品供應商ID,num_prods為計算欄位(**用COUNT(*)函數建立**)GROUP BY 子句指示MySQL按vend_id排序並分組數據。這導致對每個vend_id而不是整個表計算num_prods一次。從輸出看出,供應上1001有3個產品,供應商1002有2個產品,供應商1003有7個產品,而供應商1005有2個產品。
使用GROUP BY子句之前,需要知道一些重要規定:
- GROUP BY 子句可以包含任意數目的列。這使得能對分組進行嵌套,為數據分組提供更細緻的控制。
- 如果在GROUP BY子句中嵌套了分組,數據將在最後規定的分組上進行彙總。換句話說,在建立分組時,指定的所有類都一起計算(所以不能從個別的列取回數據)。
- GROUP BY 子句中列出的每個列都必須是檢索列或有效的表達式(但不能是聚集函數)。如果在SELECGT中使用表達式,則必須在GROUP BY子句中指定相同的表達式。不能使用別名。
- 除聚集計算語句外,在SELECT中的每個列都必須在GROUP BY子句中給出。
- 如果分組類中具有NULL值,則NULL將最為一個分組返回。如果類中有多行NULL值,他們將分為一組。
- GROUP BY 子句必須出現在WHERE子句之後,ORDER BY 子句之前。