You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
AVG 是 average 的缩写,AVG() 函数会根据分组内对应字段的和,以及记录数,求得平均值。
还是学生考试的例子,库表结构如图:
如果要统计每天考试的击杀数平均值,并按降序排列,那么 SQL:
SELECT
LEFT(e.examDate, 10), -- 取考试间字符串的左边 10 个字符,得到年月日AVG(ed.killCount) -- 对分组内的击杀数求平均FROMdemo.examsAS e
JOINdemo.exam_detailsAS ed ON (e.examId=ed.examId)
GROUP BYe.examDateORDER BYAVG(ed.killCount) DESC;
得到查询结果:
LEFT(e.examDate, 10)
AVG(ed.killCount)
2021-11-08
11.0000
2021-10-22
6.7500
2021-10-28
6.0000
(二)最大值函数:MAX() 和最小值函数:MIN()
我们以求最大值 MAX() 为例,如果要查询每天考试中的最大死亡数,并按降序排列,那么 SQL:
SELECT
LEFT(e.examDate, 10), -- 取考试间字符串的左边 10 个字符,得到年月日MAX(ed.dieCount) -- 对分组内的死亡数求最小值FROMdemo.examsAS e
JOINdemo.exam_detailsAS ed ON (e.examId=ed.examId)
GROUP BYe.examDateORDER BYMAX(ed.dieCount) DESC;
MySQL 最佳实践之联表查询(补充)
(一)求平均函数:
AVG()
AVG
是 average 的缩写,AVG()
函数会根据分组内对应字段的和,以及记录数,求得平均值。还是学生考试的例子,库表结构如图:
如果要统计每天考试的击杀数平均值,并按降序排列,那么 SQL:
得到查询结果:
(二)最大值函数:
MAX()
和最小值函数:MIN()
我们以求最大值
MAX()
为例,如果要查询每天考试中的最大死亡数,并按降序排列,那么 SQL:得到查询结果:
求最小值函数
MIN()
的使用与MAX()
类似,不再赘述。(三)计数函数:
COUNT()
通过
COUNT()
函数可以计算数据集记录的条目。COUNT()
常用于分页场景,计算出符合条件的记录一共有多少条,然后结合前端要求的每页显示几条数据,才能计算出一共有多少页。COUNT()
的两种使用方式:COUNT(*)
:统计一共有多少条记录;COUNT(字段)
:统计一共有多少个非空字段值。COUNT(*)
的使用如果要统计这些考试中,不同英雄分别出场了几次,那么 SQL:
查询结果:
在这个例子中,
COUNT(*)
与分组GROUP BY
配合使用,统计的是每组中的记录数。如果不配合分组使用,那就是统计整个数据集的记录数,相当于只有 1 组。COUNT(字段)
的使用如果我将例子中考试表
exams
再加入一条记录:那么现在
exams
表中的记录:如果用
COUNT(examName)
统计examName
字段,SQL:得到:
也就是 7 次。
而如果用
COUNT(e.goal)
统计goal
字段,SQL:得到:
结果是 6 次。
原因就是
COUNT(字段)
仅会统计指定字段的非空值出现的次数。由此小结一下,在使用
COUNT()
函数时,要对场景进行区分。如果要统计总数,那就用COUNT(*)
,如果仅统计字段的非空值记录数,那就用COUNT(字段)
。The text was updated successfully, but these errors were encountered: