1.概述
group by 就是依據(jù)by 后面的規(guī)則對(duì)數(shù)據(jù)分組,所謂的分組就是講數(shù)據(jù)集劃分成若干個(gè)'小組',針對(duì)若干個(gè)小組做處理。
2.語(yǔ)法規(guī)則
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
3.舉例說(shuō)明
我們有這樣一個(gè)訂單表:
我們希望統(tǒng)計(jì)每一個(gè)用戶(hù)訂單的總金額,我們可以借助 group by 來(lái)實(shí)現(xiàn):
select Customer,sum(OrderPrice) as total_price group by Customer;
出現(xiàn)下面的結(jié)果集:
Bush 2000
Carter 1700
Adams 2000
實(shí)際上是先講數(shù)據(jù)按照Customer分組,然后統(tǒng)計(jì)每一組orderPrice的總和,最后以一組作為一行展現(xiàn)出來(lái)。
如果去掉group by 語(yǔ)句就會(huì)出現(xiàn)下面的結(jié)果:
它是講所有的price相加得到最后的總和,與我們的預(yù)期是不一樣的。
4.注意點(diǎn)
如果出現(xiàn)下面的寫(xiě)法:
select 類(lèi)別, sum(數(shù)量) as 數(shù)量之和, 摘要from Agroup by 類(lèi)別order by 類(lèi)別 desc
會(huì)報(bào)錯(cuò),因?yàn)閟elect 的字段要么包含在group by 后面作為分組的依據(jù),要么包含在聚合函數(shù)中,否則摘要的那一列無(wú)法匹配到一行。
因此可以采用如下的寫(xiě)法:
select 類(lèi)別, sum(數(shù)量) AS 數(shù)量之和from Agroup by 類(lèi)別order by sum(數(shù)量) desc
如果想使用多列分組,可以采用group by all語(yǔ)法:
select Customer,OrderDate,sum(OrderPrice) group by all Customer,OrderDate
5.where 和having的區(qū)別
where 是在查詢(xún)分組前,講不符合where 條件的行去掉,即在分組錢(qián)過(guò)濾數(shù)據(jù),where 條件中不能包含聚合函數(shù)
having 是篩選滿(mǎn)足條件的組,即在分組之后過(guò)濾數(shù)據(jù),having語(yǔ)句中常常包含聚合函數(shù),用having過(guò)濾出特定的組。
舉例:
select Customer,sum(OrderPrice) as total_price group by Customer having total_price>1700;
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:- 一篇文章帶你了解數(shù)據(jù)庫(kù)中g(shù)roup by的用法
- MySQL group by對(duì)單字分組序和多字段分組的方法講解
- pymongo中g(shù)roup by的操作方法教程