1.聚合函数
聚合函数:对一组值执行计算,并返回单个值。
聚合函数
|
支持的数据类型
|
描述
|
sum()
|
数字
|
对指定列中的所有非空值求总和
|
avg()
|
数字
|
对指定列中的所有非空值求平均值
|
min()
|
数字、字符、datetime
|
返回指定列中的最小数字
最早的日期
或者最小的字符串
|
max()
|
数字、字符、datetime
|
返回指定列中的最小数字
最早的日期
或者最小的字符串
|
count()
|
任意基于行的数据类型
|
统计结果集合中全部记录行的数量
|
示例1:查询玩家表中有多少玩家信息
SELECT COUNT(*) FROM users
示例2:查询特定字段有多少条记录:
SELECT COUNT(user_qq) FROM users
注:由于字段可能存在null,因此要查询所有记录的数量时,采用(*)的形式查询。
示例3:查询QQ号的12301的玩家游戏的总分数
SELECT SUM(score) AS "总分数" FROM scores
WHERE user_qq = "12301"
2.在结果集内分组
使用GROUP BY分组
示例:查询每个玩家的总分数、平均分数、最高分
SELECT user_qq , #显示user_qq列,以对应后面数据的对象。
SUM(score) AS ‘总分‘,
avg(score) AS ‘平均分‘,
max(score) AS ‘最高分‘
FROM scores
GROUP BY user_qq #根据玩家的字段进行分组统计
3.筛选分组结果
在使用GROUP BY 子句时,可用HAVING子句为分组统计进一步设置统计条件,HAVING子句与GROUP BY 子句的关系相当于WHERE子句与SELECT子句之间的关系。
与WHERE子句的区别是,在HAVING子句中是以聚合函数的统计结果为筛选条件。
示例1:查询平均数大于4000的玩家QQ号、总分数、平均分数
SELECT user_qq AS ‘玩家QQ‘, #显示user_qq列,以对应后面数据的对象。
sum(score) AS ‘总分‘,
avg(score) AS ‘平均分‘,
max(score) AS ‘最高分‘
FROM scores
GROUP BY user_qq
HAVING avg(score)<4000
注:HAVING必须写在GROUP BY 之后。
示例2:查询平均数大于4000的玩家QQ号、总分数、平均分数,并按照平均数倒序排列。
SELECT user_qq AS ‘玩家QQ‘, #显示user_qq列,以对应后面数据的对象。
sum(score) AS ‘总分‘,
avg(score) AS ‘平均分‘,
max(score) AS ‘最高分‘
FROM scores
GROUP BY user_qq
HAVING avg(score)<4000
ORDER BY avg(score) DESC
4.SELECT语句的执行顺序
注:以上的排序均从“减少计算量,提高计算速度”的角度进行考量。
11汇总和分组数据
原文:https://www.cnblogs.com/yimengtianya1/p/8947679.html