MySQL中的函数使用
有三张表,学生表(t_student),班级表(t_class),成绩表(t_grade),三张表的字段设计如下

查询大竹峰班级里语文成绩前三名的女同学的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
注意:这些顺序是固定的,可以不写,但是顺序不能改变
MySQL中的函数使用的更多相关文章
- mysql中now()函数的使用,还有oracle的sysdate,可能埋下的坑
mysql中now()函数的使用,还有oracle的sysdate 在需求中如果系统中药添加当前操作的时间那么很简单的一个操作在写sql的时候直接在这个字段对应的位置写上now()函数就可以了,这样就 ...
- MySQL中concat函数(连接字符串)
MySQL中concat函数使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意:如果所有参数均为非二进制字符串 ...
- Mysql中的函数
什么是函数 mysql中的函数与存储过程类似,都是一组SQL集: 与存储过程的区别 函数可以return值,存储过程不能直接return,但是有输出参数可以输出多个返回值: 函数可以嵌入到sql语句中 ...
- MySQL中concat函数
MySQL中concat函数使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意:如果所有参数均为非二进制字符串 ...
- mysql中INSTR函数的用法
mysql中INSTR函数的用法 INSTR(字段名, 字符串) 这个函数返回字符串在某一个字段的内容中的位置, 没有找到字符串返回0,否则返回位置(从1开始) SELECT * FROM tblTo ...
- MySQL中group_concat函数-和group by配合使用
MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔 ...
- MySQL中时间函数NOW()和SYSDATE()的区别
mysql中日期函数还是比较常用的.主要有NOW()和SYSDATE()两种,虽然都表示当前时间,但使用上有一点点区别. NOW()取的是语句开始执行的时间,SYSDATE()取的是动态的实时时间. ...
- mysql中的函数与存储过程
mysql中的函数:1 mysql下创建函数: 1.1 语法: delimiter $$ -- 设置分隔符,默认是; 设置成其他符号,让编译器知道我们函数编写的结束,此处设置成$$ create fu ...
- MySQL中group_concat函数深入理解
本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . 一.MySQL中group_concat函数 完整的语法如下: gr ...
- MySQL中count函数使用方法详解
count函数是用来统计表中或数组中记录的一个函数,下面我来介绍在MySQL中count函数用法与性能比较吧. count(*) 它返回检索行的数目, 不论其是否包含 NULL值. SELECT ...
随机推荐
- Day24:static关键字
static static关键字是静态的意思,可以修饰成员方法.属性. static修饰的特点: 被类的所有对象共享 可以通过类名调用,也可以通过对象名调用:推荐使用类名调用! public clas ...
- <二>强弱指针使用场景之 多线程访问共享对象问题
代码1 #include <iostream> #include <thread> using namespace std; class A { public: A() { c ...
- JavaScript入门⑤-欲罢不能的对象原型与继承-全网一般图文版
JavaScript入门系列目录 JavaScript入门①-基础知识筑基 JavaScript入门②-函数(1)基础{浅出} JavaScript入门③-函数(2)原理{深入}执行上下文 JavaS ...
- UBOOT 启动流程
一.概述 uboot 的启动流程在网上有很多大佬记录,但是了对于像我这样的新手就有些困难了,而我也不做 uboot 相关的工作,所以没必去研究代码,这里我特意整理了一下,以流程图的形式展现代码执行的流 ...
- 配置文件 数据库存储引擎 严格模式 MySQL字段基本数据类型
目录 字符编码与配置文件 \s查看MySQL相关信息 修改配置文件my-default.ini 解决5.6版本字符编码问题 配置文件什么时候加载? 偷懒操作:输入mysql直接登录root账户 数据库 ...
- Qt对象跨线程出现的问题记录,以及解决方案
Qt在跨线程开发的时候可能会出现不少问题,在这里记录一下 Qt目前用下来还是非常强大的,虽然只是用在桌面端程序开发上,但是其强大的桌面开发库真的挺好用的(Layout除外,你妈死了). Qt除了UI, ...
- django.core.exceptions.ImproperlyConfigured: Field name `tester_id` is not valid for model `WebCase`.
代码: class WebCase(models.Model): id = models.AutoField(primary_key=True) casename = models.CharField ...
- 在CentOS8中安装gitlab
安装 docker 及 docker-compose centos8 更新源 cd /etc/yum.repos.d/ sed -i 's/mirrorlist/#mirrorlist/g' /etc ...
- [python] NetworkX实例
文章目录 NetworkX实例 1. 基础Basic 2. 绘图Drawing 3. 图标Graph NetworkX实例 代码下载地址 NetworkX 2.4版本的通用示例性示例.本教程介绍了约定 ...
- 饮料换购【第六届蓝桥杯省赛C++A/C组,第六届蓝桥杯省赛JAVAB组】
饮料换购 乐羊羊饮料厂正在举办一次促销优惠活动.乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去(但不允许暂借或赊账). 请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对 ...