目录
一、聚集函数
聚集函数:运行在行组上,计算和返回单个值的函数,用来汇总数据。
SQL聚集函数
|---------|----------|
| AVG() | 返回某列的平均值 |
| COUNT() | 返回某列的行数 |
| MAX() | 返回某列的最大值 |
| MIN() | 返回某列的最小值 |
| SUM() | 返回某列值之和 |
1.AVG()参数
AVG()通过对表中行数计数并计算特定列值之和,求得该列的平均值。AVG()可用来返回所有列的平均值,也可以用来返回特定列或行的平均值。
示例:在表t_goods中算出price的平均值放在avg_price列中,avg_price是一个别名
输入: select AVG(price)
as avg_price
from t_goods;
输出:
AVG()也可以用来确定特定列或行的平均值。
示例:包含where子句,约束vend_id = 2的产品
输入:select AVG(prod_price)
as avg_price
from products
where vend_id = 2;
输出:
注意:AVG()只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个AVG()函数。
NULL值:AVG()函数忽略列值为NULL的行。
2.COUNT()函数
COUNT()函数进行计数。确定表中行的数目或符合特定条件的行的数目
COUNT()函数的两种表示方式:
- 使用COUNT(*)对表中行的数目进行计数,不管表列中包含的时空值
- 使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值。
示例:根据name计算t_user表中的人员总数
输入:select COUNT(*)
as name
from t_user;
输出:
NULL值:如果指定列名,则指定列的值为空的行被COUNT()函数省略,但如果COUNT()函数中用的是(*),则不忽略。
3.MAX()函数
MAX()函数返回指定列中的最大值。MAX()要求指出列名。
示例:在表t_goods中找到price列的最大值
输入:select MAX(price)
as MAX_price
from t_goods;
输出:
注意:对非数值数据使用MAX()函数 虽然MAX()函数一般用来找出最大的数值或日期值,
但MySQL允许将它用来返回任意列中的最大值,包括返回文本列中的最大值。在用于文本数据时,如果数据按相应的列排序,则MAX()返回最后一行。
NULL值:MAX()函数忽略列值为NULL的行
4.MIN()函数
MIN()函数与MAX()函数的功能正好相反,它返回指定列的最小值。要求指定列名。
示例:在表t_goods中找到price列的最小值
输入: select MIN(price)
as MIN_price
from t_goods;
输出:
注意:MySQL允许将MIN()用来返回任意列中的最小值,包括返回文本列中的最小值。在用于文本数据时,如果数据按相应的列排序,则MAX()返回最前面的行。
NULL值:MAX()函数忽略列值为NULL的行
5.SUM()函数
SUM()函数用来返回指定列值的总和。
示例:在表t_goods中计算price的总和并放在SUM_price列中
输入:select SUM(price)
as SUM_price
from t_goods;
输出:
SUM()也可以用来计算合计计算值。
NULL值:MAX()函数忽略列值为NULL的行
二、聚集不同值
以上五个函数都可以都可以如下使用:
- 对所有的行执行计算,指定ALL参数或不给参数(因为ALL是默认行为)
- 只包含不同的值,指定DISTINCT参数
distinct的作用就是去重
注意:如果指定列名,则distinct只能用于count()。distinct不能用于count(*),因此不允许使用count(distinct),否则会产生错误。类似的,distinct必须使用列名,不能用于计算或表达式。
将distinct用于MAX和MIN函数 虽然技术上可以用在这俩个函数上,但是没有实际价值,最大值和最小值不管是否包含不同值都是相同的。
三、组合聚集函数
目前为止的所有聚集函数例子都只涉及单个函数。但实际上select语句可根据需要包含多个聚集函数。
示例:在t_goods中找出price的数量以及最大值,最小值,平均值
输入:select count(*) as price,
MAX(price) as MAX_price,
MIN(price) as MIN_price,
AVG(price) as AVG_price
from t_goods;
输出:
取别名:在指定别名以包含某个聚集函数的结果时,不应该使用表中的实际列名。这样做使SQL更易于理解和使用。