簡單講解sql語句中的group by的使用方法
1.概述
group by 就是依據(jù)by 后面的規(guī)則對數(shù)據(jù)分組,所謂的分組就是講數(shù)據(jù)集劃分成若干個'小組',針對若干個小組做處理。
2.語法規(guī)則
SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name
3.舉例說明
我們有這樣一個訂單表:
我們希望統(tǒng)計每一個用戶訂單的總金額,我們可以借助 group by 來實現(xiàn):
select Customer,sum(OrderPrice) as total_price group by Customer;
出現(xiàn)下面的結(jié)果集:
Bush 2000
Carter 1700
Adams 2000
實際上是先講數(shù)據(jù)按照Customer分組,然后統(tǒng)計每一組orderPrice的總和,最后以一組作為一行展現(xiàn)出來。
如果去掉group by 語句就會出現(xiàn)下面的結(jié)果:
它是講所有的price相加得到最后的總和,與我們的預(yù)期是不一樣的。
4.注意點
如果出現(xiàn)下面的寫法:
select 類別, sum(數(shù)量) as 數(shù)量之和, 摘要from Agroup by 類別order by 類別 desc
會報錯,因為select 的字段要么包含在group by 后面作為分組的依據(jù),要么包含在聚合函數(shù)中,否則摘要的那一列無法匹配到一行。
因此可以采用如下的寫法:
select 類別, sum(數(shù)量) AS 數(shù)量之和from Agroup by 類別order by sum(數(shù)量) desc
如果想使用多列分組,可以采用group by all語法:
select Customer,OrderDate,sum(OrderPrice) group by all Customer,OrderDate
5.where 和having的區(qū)別
where 是在查詢分組前,講不符合where 條件的行去掉,即在分組錢過濾數(shù)據(jù),where 條件中不能包含聚合函數(shù)
having 是篩選滿足條件的組,即在分組之后過濾數(shù)據(jù),having語句中常常包含聚合函數(shù),用having過濾出特定的組。
舉例:
select Customer,sum(OrderPrice) as total_price group by Customer having total_price>1700;
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
mysql load data infile 的用法(40w數(shù)據(jù) 用了
測試數(shù)據(jù)的時候,生成txt文件應(yīng)該快點,再用這種方式導(dǎo)入到mysql 速度上快點,40w數(shù)據(jù) 用了3-5秒導(dǎo)進mysql2013-01-01
MySQL數(shù)據(jù)庫高可用HA實現(xiàn)小結(jié)
MySQL數(shù)據(jù)庫是目前開源應(yīng)用最大的關(guān)系型數(shù)據(jù)庫,有海量的應(yīng)用將數(shù)據(jù)存儲在MySQL數(shù)據(jù)庫中,這篇文章主要介紹了MySQL數(shù)據(jù)庫高可用HA實現(xiàn),需要的朋友可以參考下2022-01-01
淺談MySQL數(shù)據(jù)同步到 Redis 緩存的幾種方法
本文主要介紹了淺談MySQL數(shù)據(jù)同步到 Redis 緩存的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03

