1.聚合函数
聚合函数:对一组值执行计算,并返回单个值。
示例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 子句对结果进行排序
注:以上的排序均从“减少计算量,提高计算速度”的角度进行考量。