本文主要給大家簡單講講MySQL入門知識(shí)之group by命令用法詳細(xì)介紹,相關(guān)專業(yè)術(shù)語大家可以上網(wǎng)查查或者找一些相關(guān)書籍補(bǔ)充一下,這里就不涉獵了,我們就直奔主題吧,希望MySQL入門知識(shí)之group by命令用法詳細(xì)介紹這篇文章可以給大家?guī)硪恍?shí)際幫助。
吉安ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
1.group by命令用法
group by的常規(guī)用法是配合聚合函數(shù),利用分組信息進(jìn)行統(tǒng)計(jì),常見的是配合max等聚合函數(shù)篩選數(shù)據(jù)后分析,以及配合having進(jìn)行篩選后過濾。
常見的聚合函數(shù)如下:
假設(shè)現(xiàn)有數(shù)據(jù)庫表如下:表user_info,id主鍵,user_id唯一鍵
CREATE TABLE `user_info` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵id',
`user_id` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '用戶編號(hào)',
`grade` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '年級(jí)',
`class` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '班級(jí)',
PRIMARY KEY (`id`), UNIQUE INDEX `uniq_user_id` (`user_id`)
)
ENGINE=InnoDB
數(shù)據(jù)
INSERT INTO `user_info` (`id`, `user_id`, `grade`, `class`) VALUES (10, '10230', 'C', 'B');
INSERT INTO `user_info` (`id`, `user_id`, `grade`, `class`) VALUES (9, '10229', 'C', 'a');
INSERT INTO `user_info` (`id`, `user_id`, `grade`, `class`) VALUES (8, '10228', 'B', 'b');
INSERT INTO `user_info` (`id`, `user_id`, `grade`, `class`) VALUES (7, '10227', 'B', 'b');
INSERT INTO `user_info` (`id`, `user_id`, `grade`, `class`) VALUES (6, '10226', 'B', 'a');
INSERT INTO `user_info` (`id`, `user_id`, `grade`, `class`) VALUES (5, '10225', 'B', 'a');
INSERT INTO `user_info` (`id`, `user_id`, `grade`, `class`) VALUES (4, '10224', 'A', 'b');
INSERT INTO `user_info` (`id`, `user_id`, `grade`, `class`) VALUES (3, '10223', 'A', 'b');
INSERT INTO `user_info` (`id`, `user_id`, `grade`, `class`) VALUES (2, '10222', 'A', 'a');
INSERT INTO `user_info` (`id`, `user_id`, `grade`, `class`) VALUES (1, '10221', 'A', 'a');
聚合函數(shù)max
select max(user_id),grade from user_info group by grade;
#這條sql的含義很明確,將數(shù)據(jù)按照grade字段分組,查詢每組最大的user_id以及當(dāng)前組內(nèi)容。注意,這里分組條件是grade,查詢的非聚合條件也是grade。這里不產(chǎn)生沖突。
結(jié)果:
having
select max(user_id),grade from user_info group by grade having grade>'A';
#這條sql與上面例子中的基本相同,不過后面跟了having過濾條件。將grade不滿足’>A’的過濾掉了。注意,這里分組條件是grade,查詢的非聚合條件也是grade。這里不產(chǎn)生沖突。
結(jié)果:
Having與Where的區(qū)別
where 子句的作用是在對(duì)查詢結(jié)果進(jìn)行分組前,將不符合where條件的行去掉,即在分組之前過濾數(shù)據(jù),where條件中不能包含聚合函數(shù),使用where條件過濾出特定的行。
having 子句的作用是篩選滿足條件的組,即在分組之后過濾數(shù)據(jù),條件中經(jīng)常包含聚合函數(shù),使用having 條件過濾出特定的組,也可以使用多個(gè)分組標(biāo)準(zhǔn)進(jìn)行分組。
2.group by的非常規(guī)用法
select max(user_id),id,grade from user_info group by grade;
#顯示出grade組中數(shù)值最大的user_id,顯示id,顯示grade,從user_infon表中提取。
結(jié)果:
這條sql的結(jié)果就值得討論了,與上述例子不同的是,查詢條件多了id一列。數(shù)據(jù)按照grade分組后,grade一列是相同的,max(user_id)按照數(shù)據(jù)進(jìn)行計(jì)算也是唯一的,id一列是如何取值的?看上述的數(shù)據(jù)結(jié)果,
推論:id是物理內(nèi)存的第一個(gè)匹配項(xiàng)。
究竟是與不是需要繼續(xù)探討。
修改數(shù)據(jù)
修改id按照上述數(shù)據(jù)結(jié)果,將id=1,改為id=99,執(zhí)行sql后結(jié)論:
顯然,與上述例子的結(jié)果不同。第一條數(shù)據(jù)id變成了99,查出的結(jié)果第一條數(shù)據(jù)的id從1變成了2。表明,id這個(gè)非聚合條件字段的取值與數(shù)據(jù)寫入的時(shí)間無關(guān),因?yàn)閕d=1的記錄是先于id=2存在的,修改的數(shù)據(jù)不過是修改了這條數(shù)據(jù)的內(nèi)容。結(jié)合mysql的數(shù)據(jù)存儲(chǔ)理論,由于id是主鍵,所以數(shù)據(jù)在檢索是是按照主鍵排序后進(jìn)行過濾的,因此
推論:id字段的選取是按照mysql存儲(chǔ)的檢索數(shù)據(jù)匹配的第一條。
將id改為1后恢復(fù)了原始結(jié)果,無法推翻上述推論。
更改查詢條件:
select max(user_id),user_id,id,grade from user_info group by grade;
#顯示出grade組中數(shù)值最大的user_id,顯示user_id,顯示id,顯示grade,從user_infon表中提取
結(jié)果為:
將數(shù)據(jù)user_id改為10999后,
執(zhí)行
select max(user_id),user_id,id,grade from user_info group by grade;
結(jié)果為:
修改了user_id后,并沒有改變查詢到的數(shù)據(jù)條目,因此得出修改唯一鍵并不能影響查詢匹配的條目規(guī)則,所以條目規(guī)則依然是匹配第一條,即id=1。
MySQL入門知識(shí)之group by命令用法詳細(xì)介紹就先給大家講到這里,對(duì)于其它相關(guān)問題大家想要了解的可以持續(xù)關(guān)注我們的行業(yè)資訊。我們的板塊內(nèi)容每天都會(huì)捕捉一些行業(yè)新聞及專業(yè)知識(shí)分享給大家的。
本文標(biāo)題:MySQL入門知識(shí)之groupby命令用法詳細(xì)介紹
分享網(wǎng)址:http://www.rwnh.cn/article14/gsphge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、電子商務(wù)、網(wǎng)站改版、自適應(yīng)網(wǎng)站、網(wǎng)站排名、網(wǎng)站策劃
聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)