佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > SQL分組函數(shù)group by和聚合函數(shù)(COUNT、MAX、MIN、AVG、SUM)的幾點(diǎn)說明

SQL分組函數(shù)group by和聚合函數(shù)(COUNT、MAX、MIN、AVG、SUM)的幾點(diǎn)說明

熱門標(biāo)簽:Linux服務(wù)器 呼叫中心市場需求 百度競價排名 服務(wù)外包 鐵路電話系統(tǒng) 地方門戶網(wǎng)站 AI電銷 網(wǎng)站排名優(yōu)化

1 分組聚合的原因

SQL中分組函數(shù)和聚合函數(shù)之前的文章已經(jīng)介紹過,單說這兩個函數(shù)有可能比較好理解,分組函數(shù)就是group by,聚合函數(shù)就是COUNT、MAX、MIN、AVG、SUM。

拿上圖中的數(shù)據(jù)進(jìn)行解釋,假設(shè)按照product_type這個字段進(jìn)行分組,分組之后結(jié)果如下圖。

SELECT product_type from productgroup by product_type

從圖中可以看出被分為了三組,分別為廚房用具、衣服和辦公用品,就相當(dāng)于對product_type這個字段進(jìn)行了去重,確實(shí)group by函數(shù)有去重的作用。

SELECT DISTINCT product_type from product

假設(shè)分組之后,我想看一下價格,也就是sale_price這個字段的值,按照如下這個寫法,會報如下錯誤。

SELECT product_type,sale_price from productgroup by product_type

這是為什么呢?原表按照product_type分組之后,廚房用具對應(yīng)4個值,衣服對應(yīng)2個值,辦公用品對應(yīng)2個值,這就是在取sale_price這個字段的時候?yàn)槭裁磮箦e了,一個空格中不能填入多個值,這時候就可以用聚合函數(shù)了,比如求和,求平均,求最大最小值,求行數(shù)。聚合之后的值就只有一個值了。

SELECT product_type,sum(sale_price),avg(sale_price),count(sale_price),max(sale_price) from productgroup by product_type

對于多個字段的分組,其原理是一樣的。從上述中記住兩點(diǎn):分組去重和分組聚合。

2 distinct和group by去重的區(qū)別 Distinct 和group by 設(shè)計(jì)時側(cè)重點(diǎn)不一樣

distinct只是為了去重,而group by是為了聚合統(tǒng)計(jì)的。

兩者都有去重的效果,但是執(zhí)行的效率不一樣

單個字段去重

--DISTINCTSELECT distinct product_type from product--GROUP BYselect product_type from productGROUP BY product_type

多個字段去重

--DISTINCTSELECT distinct product_name, product_type from product--GROUP BYselect product_name, product_type from productGROUP BY product_name, product_type

執(zhí)行效率

select 列名1>,列名2>from表名>where 查詢條件group by 分組類別having 對分組結(jié)果指定條件order by 列名> (desc)limit 數(shù)字

SQL語言的運(yùn)行順序,先執(zhí)行上圖中的第一步,然后再執(zhí)行select子句,最后對結(jié)果進(jìn)行篩選。distinct是在select子句中,而group by在第一步中,所以group by去重比distinct去重在效率上要高。

sql中聚合函數(shù)和分組函數(shù)_SQL選擇計(jì)數(shù)聚合函數(shù)-語法示例解釋

sql中聚合函數(shù)和分組函數(shù)

The COUNT operator is usually used in combination with a GROUP BY clause. It is one of the SQL “aggregate” functions, which include AVG (average) and SUM.

COUNT運(yùn)算符通常與GROUP BY子句結(jié)合使用。 它是SQL“聚合”功能之一,其中包括AVG(平均)和SUM。

This function will count the number of rows and return that count as a column in the result set.

此函數(shù)將對行數(shù)進(jìn)行計(jì)數(shù),并將該計(jì)數(shù)作為列返回到結(jié)果集中。

Here are examples of what you would use COUNT for:

以下是將COUNT用于以下用途的示例:

Counting all rows in a table (no group by required)
計(jì)算表中的所有行(不需要按組)
Counting the totals of subsets of data (requires a Group By section of the statement)
計(jì)算數(shù)據(jù)子集的總數(shù)(需要語句的“分組依據(jù)”部分)
For reference, here is the current data for all the rows in our example student database.

作為參考,這是示例學(xué)生數(shù)據(jù)庫中所有行的當(dāng)前數(shù)據(jù)。

select studentID, FullName, programOfStudy, sat_score from student; -- all records with fields of interest
This SQL statement provides a count of all rows. Note that you can give the resulting COUNT column a name using “AS”.

該SQL語句提供所有行的計(jì)數(shù)。 請注意,您可以使用“ AS”為所得的COUNT列命名。

select count(*) AS studentCount from student; -- count of all records

Here we get a count of students in each field of study.

在這里,我們得到了每個學(xué)習(xí)領(lǐng)域的學(xué)生人數(shù)。

select studentID, FullName, count(*) AS studentCount from the student table with a group by programOfStudy;

Here we get a count of students with the same SAT scores.

在這里,我們得到了具有相同SAT分?jǐn)?shù)的學(xué)生人數(shù)。

select studentID, FullName, count(*) AS studentCount from the student table with a group by sat_score;

Here is an example using the campaign funds table. This is a sum total of the dollars in each transaction and the number of contributions for each political party during the 2016 US Presidential Campaign.

這是使用廣告系列資金表的示例。 這是2016年美國總統(tǒng)大選期間每筆交易的總金額和每個政黨的捐款額。

select Specific_Party, Election_Year, format(sum(Total_$),2) AS contribution$Total, count(*) AS numberOfContributions 
from combined_party_data
group by Specific_Party,Election_Year
having Election_Year = 2021;

As with all of these things there is much more to it, so please see the manual for your database manager and have fun trying different tests yourself.

關(guān)于所有這些事情,還有很多事情要做,所以請參閱數(shù)據(jù)庫管理員手冊,并嘗試自己進(jìn)行不同的測試,這很有趣。

sql語句聚合函數(shù)和分組操作的注意事項(xiàng)

group by可以根據(jù)給定數(shù)據(jù)列的每個成員對查詢結(jié)果進(jìn)行分組統(tǒng)計(jì),最終得到一個匯總表。

group by幾個比較重要的約束:

(1)select字句中的列名和having或where中的列名必須為分組列或列函數(shù).列函數(shù)對于group by字句定義的每個組返回一個結(jié)果
(2)group by一般和聚合函數(shù)一使用才有意義,比如count,sum,avg等,使用group by 的兩個要素:
(3)出現(xiàn)在select后面的字段,要么是聚合函數(shù)中的,要么是group by中的.
(4)要篩選結(jié)果,可以先使用where再用group by或者先用group by再用having

第(4)項(xiàng)根據(jù)各個數(shù)據(jù)庫不同不一定都能適用,因此最好不要這樣用,老老實(shí)實(shí)用having

SQL聚合函數(shù)和分組數(shù)據(jù)語法及概述

(一)聚合函數(shù)是指對列上的數(shù)據(jù)進(jìn)行操作,起到統(tǒng)計(jì)的作用。前面的函數(shù)都是最一行記錄進(jìn)行操作得到的數(shù)據(jù),包括前面的日期函數(shù)、數(shù)學(xué)函數(shù)、字符函數(shù)、轉(zhuǎn)換函數(shù)以及條件判斷函數(shù)。

常用的聚合函數(shù)有:count、sum、avg、max、min。這5個函數(shù)個起到統(tǒng)計(jì)記錄數(shù)、求和、求平均值、求最大值、最小值的作用。

Count:count函數(shù)對查詢的數(shù)據(jù)統(tǒng)計(jì)記錄數(shù)量,這個函數(shù)不對字段值為NULL的值進(jìn)行統(tǒng)計(jì),也就是說某個查詢的字段有NULL值,則NULL值的數(shù)量會被減除,這樣就可以不對NULL設(shè)置查詢條件了。
如果要對NULL值設(shè)置查詢,則可以用WHERE 字段 IS NULL來作為條件。
Sum:sum函數(shù)求和,只能對數(shù)值型數(shù)據(jù)操作,也會忽略NULL值。舉例:
Select sum(考試成績) as 計(jì)算機(jī)總成績
From score
Where 課號 in (select 課號 from course where 課名=”計(jì)算機(jī)”)
Avg:求平均值,參數(shù)也必須為數(shù)值型字段名或者結(jié)果為數(shù)值的表達(dá)式。
Max、min:這兩個函數(shù)求最大值和最小值,但是不能放到WHERER中以及SELECT子句的字段名位置上。
例:select max(x1) from y where max(x2) in(select…) 錯誤的語法。
Select x1 from y where x2=max(x3) 錯誤的語法。
select max(x1) from y where x2) in(select max(x2,)…) 正確。
注:5個函數(shù)都可以使用distinct統(tǒng)計(jì)不重復(fù)的值:
Select count(distinct(課程)) as 課程數(shù)量 from 課程表
Access和mysql不能將distinct放置到參數(shù)中,解決方法:查詢distinct保存為新表INTO語句,然后再使用count。

(二)數(shù)據(jù)分組是指將數(shù)據(jù)表中的數(shù)據(jù)按照指定字段的不同值分為很多組,使用group by 子句進(jìn)行操作。

Group by通常不直接查詢所有字段并且分組,group by和select后分組字段和查詢字段通常一致。因?yàn)閟elect * from y group by x 會產(chǎn)生錯誤,通常對某個字段分組并且利用聚合函數(shù)計(jì)算分組得到的值。
聚合函數(shù)和分組的組合并設(shè)置查詢條件:可以對一個字段分組并且設(shè)定條件,這樣得到的結(jié)果將會是計(jì)算分組并且滿足條件的值。例:
查詢各個所屬院系中所有男生的值:
Select 所屬院系,count(*) as 男生人數(shù)from student where 性別='男' group by 所屬院系
查詢直方圖:利用replicate()函數(shù),將分組得到的數(shù)據(jù)作為次數(shù),重復(fù)一個設(shè)置的符號。
排序查詢結(jié)果:order by語句,ASC、DESC 位于group by之后
Case表達(dá)式和group by的結(jié)合:
Select 所屬院系,count(case
When 性別='男' then 1
Else null
End ) as 男生人數(shù),
count(case
When 性別='女' then 1
Else null
End ) as 女生人數(shù)
From student group by 所屬院系
Hanving子句設(shè)置分組group by的分組查詢條件。
Having子句總是和group by子句結(jié)合使用,依賴于分組,可以在having中使用聚合函數(shù);where 也可以設(shè)定條件,但是不依賴于分組的字段,但是不能使用聚合函數(shù)。
Select 學(xué)號,sum(考試成績) as 考試總成績 from score group by 學(xué)號 having sum(考試成績)>400 order by 考試總成績 desc

到此這篇關(guān)于SQL分組函數(shù)group by和聚合函數(shù)(COUNT、MAX、MIN、AVG、SUM)的幾點(diǎn)說明的文章就介紹到這了,更多相關(guān)SQL分組函數(shù)和聚合函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • MongoDB聚合group的操作指南
  • pandas分組聚合詳解
  • postgresql使用filter進(jìn)行多維度聚合的解決方法

標(biāo)簽:銅川 湖南 蘭州 湘潭 仙桃 衡水 崇左 黃山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQL分組函數(shù)group by和聚合函數(shù)(COUNT、MAX、MIN、AVG、SUM)的幾點(diǎn)說明》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    友谊县| 萍乡市| 本溪| 南阳市| 章丘市| 莱阳市| 汽车| 措美县| 宣城市| 志丹县| 嘉荫县| 彝良县| 肇源县| 神木县| 疏勒县| 永安市| 西华县| 和平县| 仪陇县| 迁安市| 兴安盟| 江都市| 河津市| 广灵县| 阿拉善盟| 繁峙县| 凤翔县| 龙州县| 曲阳县| 资源县| 龙口市| 陇川县| 天等县| 青龙| 晋江市| 河池市| 称多县| 衡阳县| 宁乡县| 广昌县| 昔阳县|