詳解MySQL 數(shù)據(jù)分組
分組是在SELECT語句中的GROUP BY 子句中建立的。
例:
SELECT vend_id, COUNT(*) AS num_prods FROM products GROUP BY vend_id;
GROUP BY
GROUP BY子句可以包含任意數(shù)目的列,這使得能對分組進(jìn)行嵌套,為數(shù)據(jù)分組提供更細(xì)致的控制。 如果在GROUP BY子句中嵌套了分組,數(shù)據(jù)將在最后規(guī)定的分組商家進(jìn)行匯總。換句話說,在建立分組時(shí),指定的所有列都一起計(jì)算。(所有不能從個(gè)別的列取回?cái)?shù)據(jù))。 GROUP BY子句中列出的每個(gè)列都必須是檢索列或有效的表達(dá)式(但不能是聚集函數(shù))。如果在SELECT中使用表達(dá)式,則必須在GROUP BY子句中指定相同的表達(dá)式,不能使用別名 除聚集計(jì)算語句外,SELECT語句中的每個(gè)列都必須在GROUP BY子句中給出。 如果分組列中具有NULL值,則NULL將作為一個(gè)分組返回。如果列中有多行NULL值,他們將分為一組。 GROUP BY子句必須出現(xiàn)在WHERE子句之后,ORDER BY 子句之前。 過濾分組如果想要列出至少有兩個(gè)訂單的所有骨科,這樣的數(shù)據(jù)就必須基于完整的分組而不是個(gè)別的行進(jìn)行過濾。
可以使用HAVING
SELECT cust_id, COUNT(*) AS orders FROM orders GROUP BY cust_id HAVING COUNT(*) >= 2;
HAVING和WHERE的差別,WHERE在數(shù)據(jù)分組前進(jìn)行過濾,HAVING在分組后進(jìn)行過濾。當(dāng)然,兩個(gè)也可以在同一條語句中出現(xiàn)。
列出具有2個(gè)(含)以上、價(jià)格為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;
列出具有兩個(gè)至上的產(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)生的輸出 分組行。但輸出可能不是分組的順序 任意列都可以使用(非選擇的列也可以) 只可能使用選擇列或表達(dá)式列,而且必須使用每個(gè)選擇列表達(dá)式 不一定需要 如果與聚集函數(shù)一起使用列(表達(dá)式),則必須使用
檢索總計(jì)訂單價(jià)格大于等于50的訂單的訂到號和總計(jì)訂單價(jià)格
SELECT order_num, SUM(quantity*item) AS ordertotal FROM orderitems GROUP BY order_num HAVING SUM(quantity*item_price) >= 50;
如果按總計(jì)訂單價(jià)格排序輸出
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 要返回的列或表達(dá)式 是 FROM 從中檢索數(shù)據(jù)的表 僅在從表選擇數(shù)據(jù)時(shí)使用 GROUP BY 分組說明 僅在按組計(jì)算聚集時(shí)使用 WHERE 行級過濾 否 HAVING 組級過濾 否 ORDER BY 輸出排序順序 否 LIMIT 要檢索的行數(shù) 否
以上就是詳解MySQL 數(shù)據(jù)分組的詳細(xì)內(nèi)容,更多關(guān)于MySQL數(shù)據(jù)分組的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. 輕松解決SQL Server 2005中的常見問題2. MySQL基礎(chǔ)教程9 —— 函數(shù)之日期和時(shí)間函數(shù)3. mssql鎖基礎(chǔ)教程4. MySQL 千萬級數(shù)據(jù)量如何快速分頁5. Microsoft Office Access修改代碼字體大小的方法6. 用SQL SERVER記錄站點(diǎn)日志7. Mybatis查詢方法如何實(shí)現(xiàn)沒有返回值8. centos 7安裝mysql5.5和安裝 mariadb使用的命令9. DB2 XML 全文搜索之為文本搜索做準(zhǔn)備10. 快速解決mysql導(dǎo)出scv文件亂碼、躥行的問題
