深入淺析SQL中的group by 和 having 用法
一、sql中的group by 用法解析:
Group By語(yǔ)句從英文的字面意義上理解就是“根據(jù)(by)一定的規(guī)則進(jìn)行分組(Group)”。
作用:通過一定的規(guī)則將一個(gè)數(shù)據(jù)集劃分成若干個(gè)小的區(qū)域,然后針對(duì)若干個(gè)小區(qū)域進(jìn)行數(shù)據(jù)處理。
注意:group by 是先排序后分組!
舉例說明:如果要用到group by 一般用到的就是“每”這個(gè)字, 例如現(xiàn)在有一個(gè)這樣的需求:查詢每個(gè)部門有多少人。就要用到分組的技術(shù)
select DepartmentID as '部門名稱',COUNT(*) as '個(gè)數(shù)' from BasicDepartment group by DepartmentID
這個(gè)就是使用了group by +字段進(jìn)行了分組,其中我們就可以理解為我們按照部門的名稱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來起到測(cè)試查詢結(jié)果是否符合條件的作用。
having稱為分組過濾條件,也就是分組需要的條件,所以必須與group by聯(lián)用。
需要注意說明:當(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子句都可以用來設(shè)定限制條件以使查詢結(jié)果滿足一定的條件限制。
having子句限制的是組,而不是行。聚合函數(shù)計(jì)算的結(jié)果可以當(dāng)條件來使用,where子句中不能使用聚集函數(shù),而having子句中可以。
總結(jié)
以上所述是小編給大家介紹的SQL中的group by 和 having 用法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
SQLserver刪除某數(shù)據(jù)庫(kù)中所有表實(shí)現(xiàn)思路
方便刪除數(shù)據(jù)庫(kù)中所有的數(shù)據(jù)表,清空數(shù)據(jù)庫(kù),有些有約束,不能直接delete,因?yàn)槟菢犹kU(xiǎn)了所以需要先刪除庫(kù)中的約束,接下來提供詳細(xì)實(shí)現(xiàn)代碼,感興趣的你可以參考下哦,或許對(duì)你學(xué)習(xí)有所幫助2013-02-02必須會(huì)的SQL語(yǔ)句(五) NULL數(shù)據(jù)處理和類型轉(zhuǎn)換
這篇文章主要介紹了sqlserver中NULL數(shù)據(jù)處理和類型轉(zhuǎn)換方法,需要的朋友可以參考下2015-01-01sqlserver建立新用戶及關(guān)聯(lián)數(shù)據(jù)庫(kù)教程
本文講的是SQLserver數(shù)據(jù)庫(kù)創(chuàng)建新用戶方法以及賦予此用戶特定權(quán)限的方法,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下2018-01-01sqlserver數(shù)據(jù)庫(kù)優(yōu)化解析(圖文剖析)
這篇文章主要介紹了sql數(shù)據(jù)庫(kù)查詢數(shù)據(jù)慢,針對(duì)如何優(yōu)化sqlserver數(shù)據(jù)庫(kù)做介紹,需要的朋友可以參考下2015-07-07使用linux?CentOS本地部署SQL?Server數(shù)據(jù)庫(kù)超詳細(xì)步驟
作為一名Linux愛好者,我們?cè)谑褂肔inux系統(tǒng)的時(shí)候,經(jīng)常需要使用到數(shù)據(jù)庫(kù),下面這篇文章主要給大家介紹了關(guān)于使用linux?CentOS本地部署SQL?Server數(shù)據(jù)庫(kù)的超詳細(xì)步驟,需要的朋友可以參考下2024-01-01SQL Server中使用SQL語(yǔ)句實(shí)現(xiàn)把重復(fù)行數(shù)據(jù)合并為一行并用逗號(hào)分隔
這篇文章主要介紹了SQL Sever中使用SQL語(yǔ)句實(shí)現(xiàn)把重復(fù)行數(shù)據(jù)合并為一行并用逗號(hào)分隔,本文給出了兩種實(shí)現(xiàn)方式,需要的朋友可以參考下2015-02-02sql 游標(biāo)的使用—游標(biāo)FOR循環(huán)小例子
游標(biāo)for循環(huán)是在pl/sql塊中使用游標(biāo)最簡(jiǎn)單的方式,它簡(jiǎn)化了對(duì)游標(biāo)的處理。當(dāng)使用游標(biāo)for循環(huán)時(shí),oracle會(huì)隱含的打開游標(biāo),提取游標(biāo)數(shù)據(jù)并關(guān)閉游標(biāo)。2013-05-05MSSQL MySQL 數(shù)據(jù)庫(kù)分頁(yè)(存儲(chǔ)過程)
有關(guān)分頁(yè) SQL 的資料很多,有的使用存儲(chǔ)過程,有的使用游標(biāo)。本人不喜歡使用游標(biāo),我覺得它耗資、效率低;使用存儲(chǔ)過程是個(gè)不錯(cuò)的選擇,因?yàn)榇鎯?chǔ)過程是經(jīng)過預(yù)編譯的,執(zhí)行效率高,也更靈活2012-01-01