mysql中的函数名_MySQL中的函数使用

有三张表,学生表(t_student),班级表(t_class),成绩表(t_grade),三张表的字段设计如下

39d1a7ba5b13b1ae5fc045115054dd0f.png                  

15b360559d712fed4946994f96aab12e.png                    

ec1ea061acded8ea032498255d497332.png

查询大竹峰班级里语文成绩前三名的女同学的id,姓名,班级,语文成绩:

SELECT

t_student.id,

t_student.sname,

t_student.sex,

t_class.cname,

t_grade.chinese

FROM

t_student

JOIN t_class ON t_class.id = t_student.cid

JOIN t_grade ON t_grade.sid = t_student.id

WHERE

t_student.sex = '女'

AND t_class.cname = '大竹峰'

ORDER BY

t_grade.chinese DESC

LIMIT 3

聚合函数

1、求和:sum()

2、平均值:avg()

3、计数:count()

4、最大:max()

5、最小:min()

聚合函数特点:

①每个组函数接收一个参数(字段名或者表达式)统计结果中默认忽略字段为NULL的记录

②要想列值为NULL的行也参与组函数的计算,必须使用IFNULL函数对NULL值做转换。

③不允许出现嵌套,比如sum(max(xx))

求学生表中最大年龄,最小年龄,年龄的平均值,年龄之和:

select max(age),min(age),avg(age),sum(age) from t_student;

查询学生表有多少条数据:

select count(*) from t_student;

count()在计算某一字段有多少行的时候,可能会不准确,因为为空的时候(null值),count()不会计算进去,所以一般要计算有多少行的时候,都是用的*代替,一行里边不可能所有数据都是空的嘛!

avg()在计算的时候,也不会考虑为空的时候

分组:分组必须和聚合函数配合使用,不然会出问题,但是聚合函数可以简单的单独使用(即查询表中某一字段时可以单独使用)

分组的时候会改变原来的表结构,所以不能再继续用select * 了,修改:以什么字段进行分组,这个字段就不能和聚合函数使用了,别的字段要查询出来都要和聚合函数配合使用

统计不同地区的人男女人数情况:

SELECT

sex,

address,

count(*)

FROM

t_student

GROUP BY

sex,

address;

统计每个班级的男女成绩的平均分:

SELECT

a.sex,

b.cname,

avg(c.chinese + c.math + c.english) pjf

FROM

t_student a

JOIN t_class b ON a.cid = b.id

JOIN t_grade c ON c.sid = a.id

GROUP BY

a.sex,

b.cname;

起别名,可以对表,字段起别名,起了别名之后,就只能用别名了,不能再用原表名,原字段名

起别名,关键字as,as可以省略不写

统计每个班级的男女成绩的平均分,北京的人不纳入统计:

SELECT

a.sex,

b.cname,

avg(c.chinese + c.math + c.english) pjf

FROM

t_student a

JOIN t_class b ON a.cid = b.id

JOIN t_grade c ON c.sid = a.id

where a.address!='北京'

GROUP BY

a.sex,

b.cname;

统计每个班级的男女成绩的平均分,北京的人不纳入统计,并且不显示平均分低于320分的:

SELECT

a.sex,

b.cname,

avg(c.chinese + c.math + c.english) pjf

FROM

t_student a

JOIN t_class b ON a.cid = b.id

JOIN t_grade c ON c.sid = a.id

WHERE

a.address != '北京'

GROUP BY

a.sex,

b.cname

HAVING

pjf >= 320

分析:此处只需要再来一个查询条件即可,但是pjf这个值其实是分组后聚合函数的使用得出的结果

having和where作用和用法一致,但是where是对分组前的数据的查询,having是对分组后的数据做查询

统计每个班级的男女成绩的平均分,北京的人不纳入统计,并且不显示平均分低于320分的,并且只显示成绩最高的两条数据:

SELECT

a.sex,

b.cname,

avg(c.chinese + c.math + c.english) pjf

FROM

t_student a

JOIN t_class b ON a.cid = b.id

JOIN t_grade c ON c.sid = a.id

WHERE

a.address != '北京'

GROUP BY

a.sex,

b.cname

HAVING

pjf >= 320

ORDER BY

pjf DESC

LIMIT 2

注意:这些顺序是固定的,可以不写,但是顺序不能改变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值