1、有些时候需要数据的汇总值,而不是数据本身,比如对某些数据求和、计数、求最大最小值、求平均值,因此就有了5个聚集函数:AVE()、COUNT()、MAX()、MIN()、SUM():
(1)求平均值:AVE(),一个AVG()只对一个字段有效,注意AVE()忽略NULL值,而不是将其作为“0”参与计算:
SELECT AVG(字段名1),```,AVG(字段名n) FROM 表名 WHERE 字句;
(2)计数:COUNT(),两种用法:COUNT(*):对表中行数进行计数,不管是否有NULL;COUNT(字段名):对特定列有数据的行进行计数,忽略NULL值
(3)求最大、最小值:MAX()、MIN():多用于数值和日期,文本也可以用,升序排列的最大或最小值。都忽略NULL
(4)求和:SUM():可以对单个列求和,也可以对多个列乘积求和:
(5)ALL与DISTINCT:可用于以上5个函数,默认是ALL,对非重复值计算是DISTINCT,用在函数的参数中,与字段名用空格隔开
(6)聚集函数的组合:以上几个函数可以包含在SELECT语句中,比如求Products中的商品总数、平均价格、最高价格、最低价格
2、将数据在逻辑上进行分组:比如求各个供应商的商品总数、平均价格、最高价格、最低价格
(1)GROUP BY的使用规定:
1.GROUP BY 语句必须出现在WHERE之后,ORDER BY 之前
2.分组列中若有NULL,这也将作为一组
3.除聚集计算语句外,SELECT中的选择列必须出现在GROUP BY 中
4.GROUP BY 的列必须是检索列或者表达式,若是在SELECT中使用的表达式,在GROUP BY 中也要使用相同的表达式,还不能用别名
5.GROUP BY 可以包含任意数目的列,可以嵌套
3、将分组进行过滤:HAVING,与GROUP BY 配合使用,与WHERE类似,只是WHERE针对行,HAVING针对逻辑分组,比如列出有2个及以上产品,并且其价格大于等于4的供应商:
WHERE过滤掉的行不参与GROUP BY的分组
4、分组(GROUP BY)与排序(ORDER BY):GROUP BY输出的数据不一定有顺序;ORDER BY 可以使用任意列(包括非选择列),但GROUP BY只能且必须使用选择列火表达式列;ORDER BY 可以没有,但GROUP BY 在有选择列(或表达式列)与聚集函数一起时,必须使用。
5、SELECT、FROM、WHERE、GROUP BY、HAVIN、GORDER BY顺序