深入淺析SQL中的group by 和 having 用法
一、sql中的group by 用法解析:
Group By語(yǔ)句從英文的字面意義上理解就是“根據(jù)(by)一定的規(guī)則進(jìn)行分組(Group)”。
作用:通過(guò)一定的規(guī)則將一個(gè)數(shù)據(jù)集劃分成若干個(gè)小的區(qū)域,然后針對(duì)若干個(gè)小區(qū)域進(jìn)行數(shù)據(jù)處理。
注意:group by 是先排序后分組!
舉例說(shuō)明:如果要用到group by 一般用到的就是“每”這個(gè)字, 例如現(xiàn)在有一個(gè)這樣的需求:查詢(xún)每個(gè)部門(mén)有多少人。就要用到分組的技術(shù)
select DepartmentID as '部門(mén)名稱(chēng)',COUNT(*) as '個(gè)數(shù)' from BasicDepartment group by DepartmentID
這個(gè)就是使用了group by +字段進(jìn)行了分組,其中我們就可以理解為我們按照部門(mén)的名稱(chēng)ID
DepartmentID將數(shù)據(jù)集進(jìn)行了分組;然后再進(jìn)行各個(gè)組的統(tǒng)計(jì)數(shù)據(jù)分別有多少;
二、group by 和having 解釋
前提:必須了解sql語(yǔ)言中一種特殊的函數(shù)——聚合函數(shù)。
例如:SUM, COUNT, MAX, AVG等。這些函數(shù)和其它函數(shù)的根本區(qū)別就是它們一般作用在多條記錄上。
WHERE關(guān)鍵字在使用集合函數(shù)時(shí)不能使用,所以在集合函數(shù)中加上了HAVING來(lái)起到測(cè)試查詢(xún)結(jié)果是否符合條件的作用。
having稱(chēng)為分組過(guò)濾條件,也就是分組需要的條件,所以必須與group by聯(lián)用。
需要注意說(shuō)明:當(dāng)同時(shí)含有where子句、group by 子句 、having子句及聚集函數(shù)時(shí),執(zhí)行順序如下:
1、執(zhí)行where子句查找符合條件的數(shù)據(jù);
2、使用group by 子句對(duì)數(shù)據(jù)進(jìn)行分組;
3、對(duì)group by 子句形成的組運(yùn)行聚集函數(shù)計(jì)算每一組的值;
4、最后用having 子句去掉不符合條件的組。
having 子句中的每一個(gè)元素也必須出現(xiàn)在select列表中。有些數(shù)據(jù)庫(kù)例外,如oracle.
having子句和where子句都可以用來(lái)設(shè)定限制條件以使查詢(xún)結(jié)果滿(mǎn)足一定的條件限制。
having子句限制的是組,而不是行。聚合函數(shù)計(jì)算的結(jié)果可以當(dāng)條件來(lái)使用,where子句中不能使用聚集函數(shù),而having子句中可以。
總結(jié)
以上所述是小編給大家介紹的SQL中的group by 和 having 用法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
如何安裝 SQL Server 2016及SQL Server Man
這篇文章主要介紹了如何安裝 SQL Server 2016及SQL Server Management Studio安裝配置,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-12-12
sql server 2000阻塞和死鎖問(wèn)題的查看與解決方法
在實(shí)際引用當(dāng)中,數(shù)據(jù)庫(kù)阻塞和死鎖在程序開(kāi)發(fā)過(guò)程經(jīng)常出現(xiàn),下面通過(guò)介紹數(shù)據(jù)庫(kù)阻塞和數(shù)據(jù)庫(kù)死鎖,并提供查看和解決阻塞和死鎖的方法2014-01-01
教你恢復(fù)SQLSERVER的master系統(tǒng)庫(kù)的方法
這篇文章主要介紹了恢復(fù)SQLSERVER的master系統(tǒng)庫(kù),本文介紹可能需要恢復(fù)master數(shù)據(jù)庫(kù)的情況以及如何正確完成這些步驟,需要的朋友可以參考下2022-09-09
用SQL統(tǒng)計(jì)SQLServe表存儲(chǔ)空間大小的代碼
當(dāng)SQLServer數(shù)據(jù)庫(kù)越來(lái)越龐大,而其中的表有非常多的時(shí)候,想要知道到底是哪些表最耗存儲(chǔ)空間,到底該怎樣統(tǒng)計(jì)各個(gè)表的存儲(chǔ)大小呢2012-05-05
sqlserver中通過(guò)osql/ocmd批處理批量執(zhí)行sql文件的方法
上周在測(cè)試環(huán)境建了幾十張表,保存了.sql文件,準(zhǔn)備在正式環(huán)境重建的時(shí)候懶得一個(gè)個(gè)打開(kāi)建了,做一在網(wǎng)上搜尋了一下,果然有簡(jiǎn)單點(diǎn)的方法。2011-08-08
sql中時(shí)間以5分鐘半個(gè)小時(shí)任意間隔分組的實(shí)現(xiàn)方法
這篇文章主要介紹了sql中時(shí)間以5分鐘半個(gè)小時(shí)任意間隔分組的實(shí)現(xiàn)方法,在文中給大家提到了sql server時(shí)間查詢(xún)的代碼,需要的朋友可以參考下2019-06-06
數(shù)據(jù)庫(kù)訪問(wèn)性能優(yōu)化
這篇文章主要介紹了數(shù)據(jù)庫(kù)訪問(wèn)性能優(yōu)化,小編總結(jié)了一些面向程序員的基本優(yōu)化法則,本文將結(jié)合實(shí)例來(lái)坦述數(shù)據(jù)庫(kù)開(kāi)發(fā)的優(yōu)化知識(shí),需要的朋友可以參考下2015-08-08
去掉前面的0的sql語(yǔ)句(前導(dǎo)零,零前綴)
一個(gè)列的格式是單引號(hào)后面跟著4位的數(shù)字,比如’0003,’0120,’4333,我要轉(zhuǎn)換成3,120,4333這樣的格式,就是去掉單引號(hào)和前導(dǎo)的0,用以下語(yǔ)句就可以。2011-08-08

