詳解MySQL 數(shù)據(jù)分組
創(chuàng)建分組
分組是在SELECT語句中的GROUP BY 子句中建立的。
例:
SELECT vend_id, COUNT(*) AS num_prods FROM products GROUP BY vend_id;
GROUP BY
- GROUP BY子句可以包含任意數(shù)目的列,這使得能對分組進行嵌套,為數(shù)據(jù)分組提供更細致的控制。
- 如果在GROUP BY子句中嵌套了分組,數(shù)據(jù)將在最后規(guī)定的分組商家進行匯總。換句話說,在建立分組時,指定的所有列都一起計算。(所有不能從個別的列取回數(shù)據(jù))。
- GROUP BY子句中列出的每個列都必須是檢索列或有效的表達式(但不能是聚集函數(shù))。如果在SELECT中使用表達式,則必須在GROUP BY子句中指定相同的表達式,不能使用別名
- 除聚集計算語句外,SELECT語句中的每個列都必須在GROUP BY子句中給出。
- 如果分組列中具有NULL值,則NULL將作為一個分組返回。如果列中有多行NULL值,他們將分為一組。
- GROUP BY子句必須出現(xiàn)在WHERE子句之后,ORDER BY 子句之前。
過濾分組
如果想要列出至少有兩個訂單的所有骨科,這樣的數(shù)據(jù)就必須基于完整的分組而不是個別的行進行過濾。
可以使用HAVING
SELECT cust_id, COUNT(*) AS orders FROM orders GROUP BY cust_id HAVING COUNT(*) >= 2;
HAVING和WHERE的差別,WHERE在數(shù)據(jù)分組前進行過濾,HAVING在分組后進行過濾。當然,兩個也可以在同一條語句中出現(xiàn)。
列出具有2個(含)以上、價格為10(含)以上的產(chǎn)品的供應(yīng)商
SELECT vend_id, COUNT(*) AS num_prods FROM products WHERE prod_price >= 10 GROUP BY vend_id HAVING COUNT(*) >= 2;
列出具有兩個至上的產(chǎn)品的供應(yīng)商
SELECT vend_id, COUNT(*) AS num_prods FROM products GROUP BY vend_id HAVING COUNT(*) >= 2;
分組和排序
ORDER BY | GROUP BY |
---|---|
排序產(chǎn)生的輸出 | 分組行。但輸出可能不是分組的順序 |
任意列都可以使用(非選擇的列也可以) | 只可能使用選擇列或表達式列,而且必須使用每個選擇列表達式 |
不一定需要 | 如果與聚集函數(shù)一起使用列(表達式),則必須使用 |
檢索總計訂單價格大于等于50的訂單的訂到號和總計訂單價格
SELECT order_num, SUM(quantity*item) AS ordertotal FROM orderitems GROUP BY order_num HAVING SUM(quantity*item_price) >= 50;
如果按總計訂單價格排序輸出
SELECT order_num, SUM(quantity * item_price) AS ordertotal FROM orderitems GROUP BY order_num HAVING SUM(quantity * item_price) >= 50 ORDER BY ordertotal;
SELECT子句的順序
子句 | 說明 | 是否必須使用 |
---|---|---|
SELECT | 要返回的列或表達式 | 是 |
FROM | 從中檢索數(shù)據(jù)的表 | 僅在從表選擇數(shù)據(jù)時使用 |
GROUP BY | 分組說明 | 僅在按組計算聚集時使用 |
WHERE | 行級過濾 | 否 |
HAVING | 組級過濾 | 否 |
ORDER BY | 輸出排序順序 | 否 |
LIMIT | 要檢索的行數(shù) | 否 |
以上就是詳解MySQL 數(shù)據(jù)分組的詳細內(nèi)容,更多關(guān)于MySQL數(shù)據(jù)分組的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Mac OS系統(tǒng)下mysql 5.7.20安裝教程圖文詳解
這篇文章主要介紹了Mac OS系統(tǒng)下mysql 5.7.20安裝教程圖文詳解,本文給大家介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下2017-11-11mysql "too many connections" 錯誤 之 mysql解決方法
解決方法是修改/etc/mysql/my.cnf,添加以下一行2009-06-06幾種MySQL中的聯(lián)接查詢操作方法總結(jié)
這篇文章主要介紹了幾種MySQL中的聯(lián)接查詢操作方法總結(jié),文中包括一些代碼舉例講解,需要的朋友可以參考下2015-04-04