初识Mysql(part11)--我需要知道的4条Mysql语句之分组
學習筆記,以代碼和例子堆砌而成,方便查閱。
參考書籍:《Mysql必知必會》等
要點:GROUP BY子句、HAVING關鍵字
此Blog里的例子都會用下面grouping數據表:
# id, pro_version, price, pro_num '1', '101', '20', '500' '2', '101', '2', '1000' '3', '101', '3', '250' '4', '101', '10', '300' '5', '102', '5', '200' '6', '102', '3', '100' '7', '103', '100', '30'按照pro_version分組,并計算每組的個數。
SELECT pro_version,COUNT(*) AS num_prods FROM grouping GROUP BY pro_version;輸出:
# pro_version, num_prods '101', '4' '102', '2' '103', '1'對于GROUP BY我萌需要注意的是:
①GROUP BY子句可以包含任意數目的列,這使得能對分組進行嵌套,對分組進行更為細致的控制。
②GROUP BY子句中的每一列都必須是檢索列或有效的表達式(但不能是聚集函數)。如果在SELECT中使用表達式,則必須在GROUP BY子句中指定相同的表達式,不能使用別名。
③除聚集計算語句外,SELECT語句中的每個列都必須在GROUP BY字句中給出。
④如果分組列中有NULL值,則NULL將作為一個分組返回。如果列中有多行NULL值,它們將分為一組。
⑤GROUP BY子句在WHERE子句之后,且在ORDER BY子句之前。
按照pro_version分組,計算每組的個數,并篩選出組數大于等于2的組。
SELECT pro_version,COUNT(*) AS num_prods FROM grouping GROUP BY pro_version HAVING COUNT(*)>=2;輸出:
# pro_version, num_prods '101', '4' '102', '2'檢索出price大于等于10的行,并將其按照pro_version分組,計算每組的個數,篩選出組數大于等于2的組。
SELECT pro_version, COUNT(*) AS num_prods FROM grouping WHERE price>=10 GROUP BY pro_version HAVING COUNT(*)>=2;輸出:
# pro_version, num_prods '101', '2'HAVING和WHERE非常類似,我們前幾個part的Blog介紹的關于WHERE的技術都適用于HAVING,WHERE一般用于過濾行,而HAVING過濾分組。WHERE在數據分組前進行過濾,而HAVING在數據分組后進行過濾。
按照pro_version分組,計算每組price*pro_num總和,并篩選出price*pro_num總和大于等于2000的組,最后按price*pro_num總和的升序排列。
SELECT pro_version,SUM(price*pro_num) AS total FROM grouping GROUP BY pro_version HAVING SUM(price*pro_num)>=2000 ORDER BY total;輸出:
# pro_version, total '103', '3000' '101', '15750'SELECT子句及其順序:
| SELECT | 要返回的列或表達式 |
| FROM | 從中檢索數據的表 |
| WHERE | 行級過濾 |
| GROUP BY | 分組說明 |
| HAVING | 組級過濾 |
| ORDER BY | 輸出順序數據 |
| LIMIT | 要檢索的行數 |
總結
以上是生活随笔為你收集整理的初识Mysql(part11)--我需要知道的4条Mysql语句之分组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《弗洛伊德及其后继者》读书笔记(part
- 下一篇: 橙光游戏《你说的我照做游戏》攻略