11汇总和分组数据

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语句的执行顺序
from子句指定数据源
where子句基于指定的条件对记录进行筛选
group by子句将数据划分为多个分组
使用聚合函数进行计算
使用having子句筛选分组
order by 子句对结果进行排序
注:以上的排序均从“减少计算量,提高计算速度”的角度进行考量。
 
posted @ 2018-04-25 22:16  yimengtianya1  阅读(196)  评论(0编辑  收藏  举报