1.首先我們需要了解下什么是聚合函數
聚合函數aggregation function又稱為組函數。
認情況下 聚合函數會對當前所在表當做一個組進行統計。
2.聚合函數的特點
1.每個組函數接收一個參數(字段名或者表達式)
統計結果中默認忽略字段為NULL的記錄
2.要想列值為NULL的行也參與組函數的計算,必須使用IFNULL函數對NULL值做轉換。
3.
不允許出現嵌套 比如
sum(max(xx))
3.聚合函數 count(),求數據表的行數
1
|
select
count
(*/字段名)
from
數據表
|
4.聚合函數 max(),求某列的最大數值
1
|
select
max
(字段名)
from
數據表
|
5.聚合函數min(),求某列的最小值
1
|
select
main(字段名)
from
數據表
|
6.聚合函數sum(),對數據表的某列進行求和操作
1
|
select
sum
(字段名)
from
數據表
|
7.聚合函數avg(),對數據表的某列進行求平均值操作
1
|
select
avg
(字段名)
from
數據表
|
8.聚合函數和分組一起使用
1
|
select
count
(*),group_concat(age)
from
students
group
by
age;
|
總結:
MySQL的聚合函數和我們日常office表使用的一些對表的操作的方法大致相同,在工作中主要配合分組使用
=====================================================
一、聚合函數(aggregation function)---也就是組函數
在一個行的集合(一組行)上進行操作,對每個組給一個結果。
常用的組函數:
求平均值 |
|
統計行的數量 |
|
求最大值 |
|
求最小值 |
|
求累加和 |
①每個組函數接收一個參數
②默認情況下,組函數忽略列值為null的行,不參與計算
③有時,會使用關鍵字distinct剔除字段值重復的條數
注意:
1)當使用組函數的select語句中沒有group by子句時,中間結果集中的所有行自動形成一組,然后計算組函數;
2)組函數不允許嵌套,例如:count(max(…));
3)組函數的參數可以是列或是函數表達式;
4)一個SELECT子句中可出現多個聚集函數。
table test
Field | Type | Null | Key | Default | Extra |
id | int(11) | NO | PRI | NULL | auto_increment |
name | char(50) | NO | NULL | ||
age | int(11) | NO | NULL | ||
school | char(50) | YES | NULL |
(一)AVG()函數
AVG()通過對表中行數計數並計算特定列值之和,從而求得該列的平均值。
例如:SELECT AVG(age) AS avg_age FROM test;
此語句返回表test中所有age的平均值。
例如:SELECT AVG(age) AS avg_age FROM test WHERE name="john";
此語句返回表test中name=john的age的平均值。
注:AVG只能確定特定數值列的平均值,而且列名必須作為函數參數給出。為了獲得多個列的平均值,必須使用多個avg函數。而且avg函數會忽略列值為NULL的行。
(二)COUNT()函數
COUNT()函數進行計數。可利用COUNT()函數確定表中行的數目或者符合特定條件的行的數目。
COUNT()有兩種使用方式:
1.使用COUNT(*)對表中行的數目進行計數,不管表列中包含的是空值(NULL)還是非空值。
2.使用COUNT(column)對特定列中具有值的行進行計數,忽略NULL值。
例如 SELECT COUNT(*) AS num_test FROM test;
此語句對表test所有行進行計數,返回表的總行數,不管行中各列有什么值。
例如 SELECT COUNT(school) FROM test;
此語句只對school列中有值的行進行計數,忽略null行。
(三)MAX()函數
MAX()函數返回指定列中的最大值。MAX()要求指定列名。
例如SELECT MAX(age) FROM test;
此語句返回表test中age的最大值。
注:MAX()函數忽略值為NULL的行。
(四)MIN()函數
MIN()函數返回指定列的最小值,MIN()要求指定列名。
例如 SELEC MIN(age) FROM test;
此語句返回最小的age值。
注:MIN()函數忽略列值為NULL的行。
(五)SUM()函數
SUM()函數來返回指定列值的和(總計)。
SELECT SUM(age)FROM test;
此語句返回age列所有值之和。
注:SUM函數忽略列值為NULL的行。SUM也可以用來合計計算值,SUM(price*count)。
(六)聚集不同值
對以上5個聚集函數都可以如下使用:
1.對所有行執行計算,指定ALL參數或者不給參數(ALL參數是默認的)
2.只包含不同的值,指定DISTINCT參數
例如SELECT AVG(DISTINCT age) FROM test;
此語句返回age值不同的所有age值的平均值。
注:DISTINCT只能用在列名前面,不能用在表達式前。