Mysql中order by、group by、having的區(qū)別深入分析
order by 從英文里理解就是行的排序方式,默認(rèn)的為升序。 order by 后面必須列出排序的字段名,可以是多個(gè)字段名。
group by 從英文里理解就是分組。必須有“聚合函數(shù)”來(lái)配合才能使用,使用時(shí)至少需要一個(gè)分組標(biāo)志字段。
什么是“聚合函數(shù)”?
像sum()、count()、avg()等都是“聚合函數(shù)”
使用group by 的目的就是要將數(shù)據(jù)分類匯總。
一般如:
select 單位名稱,count(職工id),sum(職工工資) form [某表]
group by 單位名稱
這樣的運(yùn)行結(jié)果就是以“單位名稱”為分類標(biāo)志統(tǒng)計(jì)各單位的職工人數(shù)和工資總額。
在sql命令格式使用的先后順序上,group by 先于 order by。
select 命令的標(biāo)準(zhǔn)格式如下:
SELECT select_list
[ INTO new_table ]
FROM table_source
[ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
1. GROUP BY 是分組查詢, 一般 GROUP BY 是和聚合函數(shù)配合使用
group by 有一個(gè)原則,就是 select 后面的所有列中,沒(méi)有使用聚合函數(shù)的列,必須出現(xiàn)在 group by 后面(重要)
例如,有如下數(shù)據(jù)庫(kù)表:
A B
1 abc
1 bcd
1 asdfg
如果有如下查詢語(yǔ)句(該語(yǔ)句是錯(cuò)誤的,原因見前面的原則)
select A,B from table group by A
該查詢語(yǔ)句的意圖是想得到如下結(jié)果(當(dāng)然只是一相情愿)
A B
abc
1 bcd
asdfg
右邊3條如何變成一條,所以需要用到聚合函數(shù),如下(下面是正確的寫法):
select A,count(B) as 數(shù)量 from table group by A
這樣的結(jié)果就是
A 數(shù)量
1 3
2. Having
where 子句的作用是在對(duì)查詢結(jié)果進(jìn)行分組前,將不符合where條件的行去掉,即在分組之前過(guò)濾數(shù)據(jù),條件中不能包含聚組函數(shù),使用where條件顯示特定的行。
having 子句的作用是篩選滿足條件的組,即在分組之后過(guò)濾數(shù)據(jù),條件中經(jīng)常包含聚組函數(shù),使用having 條件顯示特定的組,也可以使用多個(gè)分組標(biāo)準(zhǔn)進(jìn)行分組。
having 子句被限制子已經(jīng)在SELECT語(yǔ)句中定義的列和聚合表達(dá)式上。通常,你需要通過(guò)在HAVING子句中重復(fù)聚合函數(shù)表達(dá)式來(lái)引用聚合值,就如你在SELECT語(yǔ)句中做的那樣。例如:
SELECT A COUNT(B) FROM TABLE GROUP BY A HAVING COUNT(B)>2
相關(guān)文章
MySQL?數(shù)據(jù)庫(kù)的對(duì)庫(kù)的操作及其數(shù)據(jù)類型
這篇文章主要介紹了MySQL?數(shù)據(jù)庫(kù)的對(duì)庫(kù)的操作及其數(shù)據(jù)類型,下面文字圍繞數(shù)據(jù)庫(kù)的對(duì)庫(kù)的操作及其數(shù)據(jù)類型的相關(guān)資料展開詳細(xì)介紹,需要的小伙伴可以參考一下,希望對(duì)你有所幫助2021-12-12
詳解數(shù)據(jù)庫(kù)連接的URL的寫法及總結(jié)
這篇文章主要介紹了詳解數(shù)據(jù)庫(kù)連接的URL的寫法及總結(jié)的相關(guān)資料這里提供了四種方法1、oracle.2、MySQL.3、SQL Server.4、DB2,需要的朋友可以參考下2017-07-07
Linux下MySQL5.7.18 yum方式從卸載到安裝過(guò)程圖解
這篇文章主要介紹了Linux下MySQL5.7.18 yum方式從卸載到安裝過(guò)程圖解,需要的朋友可以參考下2017-06-06
MySQL中case?when對(duì)NULL值判斷的踩坑記錄
最近在學(xué)習(xí)Hive基礎(chǔ)知識(shí)時(shí),遇到了遇到了Case?When?Else?End語(yǔ)法,這篇文章主要給大家介紹了關(guān)于MySQL中case?when對(duì)NULL值判斷的踩坑記錄,需要的朋友可以參考下2021-12-12
淺談Mysql使用B+樹來(lái)實(shí)現(xiàn)索引的原因
這篇文章,主要來(lái)探討一下為什么Mysql使用B+樹來(lái)實(shí)現(xiàn)索引,這里討論的目標(biāo)是Mysql的InnoDB存儲(chǔ)引擎.可以想象一下,如果你是Mysql的開發(fā)人員,你會(huì)怎么去選擇合適的數(shù)據(jù)結(jié)構(gòu)呢,感興趣的小伙伴跟著小編一起來(lái)探討吧2023-05-05
MySQL在Centos7環(huán)境安裝的完整步驟記錄
在CentOS7環(huán)境下安裝MySQL是一項(xiàng)常見的任務(wù),尤其對(duì)于那些沒(méi)有網(wǎng)絡(luò)連接或者需要在隔離環(huán)境中的開發(fā)者來(lái)說(shuō),離線安裝MySQL顯得尤為重要,這篇文章主要介紹了MySQL在Centos7環(huán)境安裝的完整步驟,需要的朋友可以參考下2024-10-10

