上一篇聚合函數(shù)末尾處使用了GROUP BY,但沒(méi)有做具體的介紹,這一篇就主要介紹一下GROUP BY的使用方法。順便介紹一下對(duì)分組查詢的過(guò)濾關(guān)鍵詞HAVING的用法。
創(chuàng)新互聯(lián)公司一直通過(guò)網(wǎng)站建設(shè)和網(wǎng)站營(yíng)銷(xiāo)幫助企業(yè)獲得更多客戶資源。 以"深度挖掘,量身打造,注重實(shí)效"的一站式服務(wù),以網(wǎng)站設(shè)計(jì)、做網(wǎng)站、移動(dòng)互聯(lián)產(chǎn)品、成都營(yíng)銷(xiāo)網(wǎng)站建設(shè)服務(wù)為核心業(yè)務(wù)。十載網(wǎng)站制作的經(jīng)驗(yàn),使用新網(wǎng)站建設(shè)技術(shù),全新開(kāi)發(fā)出的標(biāo)準(zhǔn)網(wǎng)站,不但價(jià)格便宜而且實(shí)用、靈活,特別適合中小公司網(wǎng)站制作。網(wǎng)站管理系統(tǒng)簡(jiǎn)單易用,維護(hù)方便,您可以完全操作網(wǎng)站資料,是中小公司快速網(wǎng)站建設(shè)的選擇。
在MySQL中,GROUP BY關(guān)鍵詞可以根據(jù)一個(gè)或多個(gè)字段對(duì)查詢結(jié)果進(jìn)行分組,類(lèi)似于Excel中的數(shù)據(jù)透視表??梢詥为?dú)使用,但一般情況下都是結(jié)合聚合函數(shù)來(lái)使用的。
語(yǔ)法格式如下:
下面演示都是基于這一張簡(jiǎn)單的省份對(duì)應(yīng)大區(qū)的表格。
【單獨(dú)使用GROUP BY】
單獨(dú)使用GROUP BY關(guān)鍵字時(shí),查詢結(jié)果會(huì)只顯示每個(gè)分組的第一條記錄。
根據(jù)省份表里面的大區(qū)進(jìn)行聚合,查詢?nèi)珖?guó)共分成了幾個(gè)大區(qū),SQL語(yǔ)句如下↓
【GROUP BY結(jié)合聚合函數(shù)】
5個(gè)聚合函數(shù)上一篇已經(jīng)詳細(xì)介紹了用法,GROUP BY和聚合函數(shù)結(jié)合使用也是最頻繁的,下面就繼續(xù)使用省份表來(lái)求每個(gè)大區(qū)有多少個(gè)省份,對(duì)應(yīng)的聚合函數(shù)就是COUNT函數(shù),SQL語(yǔ)句如下↓
【GROUP BY結(jié)合GROUP_CONCAT】
這還是一個(gè)很有用的功能,GROUP_CONCAT() 函數(shù)會(huì)把每個(gè)分組的字段值都合并成一行顯示出來(lái)。
下面繼續(xù)使用省份表,把每個(gè)大區(qū)對(duì)應(yīng)的省份放在一行展示,用分號(hào)分開(kāi),SQL語(yǔ)句如下↓
【GROUP BY結(jié)合WITH ROLLUP】
WITH POLLUP關(guān)鍵詞用來(lái)在所有記錄的最后加上一條記錄,這條記錄是上面所有記錄的總和,SQL語(yǔ)句如下↓
【GROUP BY結(jié)合HAVING】
在MySQL中,可以使用HAVING關(guān)鍵字對(duì)分組后的數(shù)據(jù)進(jìn)行過(guò)濾。
使用 HAVING 關(guān)鍵字的語(yǔ)法格式如下:
HAVING關(guān)鍵詞和WHERE關(guān)鍵詞都可以用來(lái)過(guò)濾數(shù)據(jù),且HAVING支持WHERE關(guān)鍵詞中所有的操作符和語(yǔ)法。但是WHERE和HAVING關(guān)鍵字也存在以下幾點(diǎn)差異:
下面篩選一下省份數(shù)量在7個(gè)及以上的大區(qū),SQL語(yǔ)句如下↓
【GROUP BY結(jié)合ORDER BY】
聚合后的數(shù)據(jù),一半情況下也是需要進(jìn)行排序的,通過(guò)ORDER BY對(duì)聚合查詢結(jié)果進(jìn)行排序,對(duì)省份數(shù)量按從大到小進(jìn)行排序,SQL語(yǔ)句如下↓
End
◆ PowerBI開(kāi)場(chǎng)白
◆ Python高德地圖可視化
◆ Python不規(guī)則條形圖
如何分組數(shù)據(jù),以便能匯總表內(nèi)容的子集。這涉及兩個(gè)新SELECT語(yǔ)句子句,分別是GROUP BY子句和HAVING子句。
分組允許把數(shù)據(jù)分為多個(gè)邏輯組,以便能對(duì)每個(gè)組進(jìn)行聚集計(jì)算。
分組是在SELECT語(yǔ)句的GROUP BY 子句中建立的。
來(lái)看例子理解:
mysqlselect vend_id,COUNT(*) AS num_prods from products group by vend_id;
也就是不同的Id的商品總數(shù)都能分別查出來(lái)。
除了能用GROUP BY分組數(shù)據(jù)外,Mysql還允許過(guò)濾分組,規(guī)定包括哪些分組,排除哪些分組。
也就是HAVING子句。
mysqlselect cust_id,COUNT( /) AS orders from orders uGROUP BY/u cust_id uHAVING/u COUNT( /) =2;
注意:這里HAVING換成WHERE是不管用的。HAVING針對(duì)于分組。
WHERE在數(shù)據(jù)分組前進(jìn)行過(guò)濾,HAVING在數(shù)據(jù)分組后進(jìn)行過(guò)濾。
那么咱么看看怎么混合WHERE和HAVING。
mysqlselect vend_id, COUNT( / ) AS num_prods from products uwhere prod_price=10 group by/u vend_id HAVING COUNT( /) =2;
mysqlselect order_num,SUM(quantity*item_price) AS ordertotal
from orderitems
GROUP BY order_num
HAVING SUM(quantity*item_price) =50
order by ordertotal;
/*語(yǔ)法:
select 分組函數(shù) 列(要求出現(xiàn)在group by的后面)
from 表
【where 篩選條件】
group by 分組的列表
[order by 子句]
注意:查詢列表必須特殊,要求是分組函數(shù)和group by 后出現(xiàn)的字段
特點(diǎn):
1.分組查詢中篩選條件分為兩類(lèi):
數(shù)據(jù)源 位置 關(guān)鍵字
分組前篩選 原始表 group by子句的前面 where
分組后篩選 分組后的結(jié)果集 group by子句的后面 having
1.分組函數(shù)做條件肯定是放在having子句中
2.能用分組前篩選的,優(yōu)先考慮使用分組前篩選
2.group by 子句支持單個(gè)字段、多個(gè)字段分組(用逗號(hào)隔開(kāi)沒(méi)有順序要求)表達(dá)式或函數(shù)(用的較少)
3.也可以添加排序(放在整個(gè)group by子句之后)
*/
count(1),其實(shí)就是計(jì)算一共有多少符合條件的行。
1并不是表示第一個(gè)字段,而是表示一個(gè)固定值。
其實(shí)就可以想成表中有這么一個(gè)字段,這個(gè)字段就是固定值1,count(1),就是計(jì)算一共有多少個(gè)1.
同理,count(2),也可以,得到的值完全一樣,count('x'),count('y')都是可以的。一樣的理解方式。在你這個(gè)語(yǔ)句理都可以使用,返回的值完全是一樣的。就是計(jì)數(shù)。
count(*),執(zhí)行時(shí)會(huì)把星號(hào)翻譯成字段的具體名字,效果也是一樣的,不過(guò)多了一個(gè)翻譯的動(dòng)作,比固定值的方式效率稍微低一些。
網(wǎng)頁(yè)題目:mysql分組怎么用 mysql數(shù)據(jù)分組并進(jìn)行排序
當(dāng)前鏈接:http://jinyejixie.com/article38/doschpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開(kāi)發(fā)、搜索引擎優(yōu)化、虛擬主機(jī)、動(dòng)態(tài)網(wǎng)站、面包屑導(dǎo)航、域名注冊(cè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)