聚合函数以及分组,过滤
聚合函数
不吹不黑,这个是真的比上一个类函数常用~~~
函数名称 | 描述 |
---|---|
count() | 计数 |
sum() | 求和 |
avg() | 平均值 |
max() | 最大值 |
min() | 最小值 |
...... |
-- ======================聚合函数=======================
SELECT COUNT(`borndate`) FROM `student`; -- count(字段),会忽略所有的null值
SELECT COUNT(*) FROM `student`; -- count(*),不会忽略null值
SELECT COUNT(1) FROM `student`; -- count(1),不会忽略null值
-- count(*),count(1),本质上都是计算行数,其实差不多
-- 这三个都可以统计表中的数据(想要查询一个表中有多少条记录,就使用count())
SELECT SUM(`studentresult`) AS '总和' FROM result
SELECT AVG(`studentresult`) AS '平均分' FROM result
SELECT MAX(`studentresult`) AS '最高分' FROM result
SELECT MIN(`studentresult`) AS '最低分' FROM result
举个例子说明一下:
干脆把分组和过滤加一起分析
-- 查询不同课程的平均分,最高分,最低分,平均分大于80
-- 核心:根据不同的课程分组
SELECT ANY_VALUE(`subjectname`), -- 高版本的SQLyog需要加'ANY_VALUE'这个函数
AVG(`studentresult`) AS '平均分',
MAX(`studentresult`) AS '最高分',
MIN(`studentresult`) AS '最低分'
FROM `result` AS r
INNER JOIN `subject` AS sub
ON r.`subjectno`=sub.`subjectno`
GROUP BY r.`subjectno` -- 通过什么字段来分组
HAVING '最低分' > 10 -- 不加这句话就可以查询出来结果,加了反而却成了空表了
-- 我感觉可能是数据太少的原因,要是有知道为什么的朋友可以帮我分析一下啦~
SELECT完整的语法: