mysql分组查询局部显示_Mysql聚合函数和分组查询实战

一 常用聚合函数

函数名称

描述

COUNT()

返回满足Select条件的记录总和数,如 select count(*) 【不建议使用 *,效率低】

SUM()

返回数字字段或表达式列作统计,返回一列的总和。

AVG()

通常为数值字段或表达列作统计,返回一列的平均值

MAX()

可以为数值字段,字符字段或表达式列作统计,返回最大的值。

MIN()

可以为数值字段,字符字段或表达式列作统计,返回最小的值。

二 聚合函数实战

-- 聚合函数

/*COUNT:非空的*/

SELECT COUNT(studentname) FROM student;

SELECT COUNT(*) FROM student;

SELECT COUNT(1) FROM student; /*推荐*/

-- 从含义上讲,count(1) 与 count(*) 都表示对全部数据行的查询。

-- count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。

-- count(*) 包括了所有的列,相当于行数,在统计结果的时候,包含字段为null 的记录;

-- count(1) 用1代表代码行,在统计结果的时候,包含字段为null 的记录 。

/*

很多人认为count(1)执行的效率会比count(*)高,原因是count(*)会存在全表扫描,而count(1)可以针对一个字段进行查询。其实不然,count(1)和count(*)都会对全表进行扫描,统计所有记录的条数,包括那些为null的记录,因此,它们的效率可以说是相差无几。而count(字段)则与前两者不同,它会统计该字段不为null的记录条数。

下面它们之间的一些对比:

1)在表没有主键时,count(1)比count(*)快

2)有主键时,主键作为计算条件,count(主键)效率最高;

3)若表格只有一个字段,则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;

三 分组查询实战

-- 查询不同课程的平均分,最高分,最低分

-- 前提:根据不同的课程进行分组

SELECT subjectname,AVG(studentresult) AS 平均分,MAX(StudentResult) AS 最高分,MIN(StudentResult) AS 最低分

FROM result AS r

INNER JOIN `subject` AS s

ON r.subjectno = s.subjectno

GROUP BY r.subjectno

HAVING 平均分>80;

/*

where写在group by前面.

要是放在分组后面的筛选

要使用HAVING..

因为having是从前面筛选的字段再筛选,而where是从数据表中的>字段直接进行的筛选的

*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值