有三张表,学生表(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中的函数使用的更多相关文章

  1. mysql中now()函数的使用,还有oracle的sysdate,可能埋下的坑

    mysql中now()函数的使用,还有oracle的sysdate 在需求中如果系统中药添加当前操作的时间那么很简单的一个操作在写sql的时候直接在这个字段对应的位置写上now()函数就可以了,这样就 ...

  2. MySQL中concat函数(连接字符串)

    MySQL中concat函数使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意:如果所有参数均为非二进制字符串 ...

  3. Mysql中的函数

    什么是函数 mysql中的函数与存储过程类似,都是一组SQL集: 与存储过程的区别 函数可以return值,存储过程不能直接return,但是有输出参数可以输出多个返回值: 函数可以嵌入到sql语句中 ...

  4. MySQL中concat函数

    MySQL中concat函数使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意:如果所有参数均为非二进制字符串 ...

  5. mysql中INSTR函数的用法

    mysql中INSTR函数的用法 INSTR(字段名, 字符串) 这个函数返回字符串在某一个字段的内容中的位置, 没有找到字符串返回0,否则返回位置(从1开始) SELECT * FROM tblTo ...

  6. MySQL中group_concat函数-和group by配合使用

    MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔 ...

  7. MySQL中时间函数NOW()和SYSDATE()的区别

    mysql中日期函数还是比较常用的.主要有NOW()和SYSDATE()两种,虽然都表示当前时间,但使用上有一点点区别. NOW()取的是语句开始执行的时间,SYSDATE()取的是动态的实时时间. ...

  8. mysql中的函数与存储过程

    mysql中的函数:1 mysql下创建函数: 1.1 语法: delimiter $$ -- 设置分隔符,默认是; 设置成其他符号,让编译器知道我们函数编写的结束,此处设置成$$ create fu ...

  9. MySQL中group_concat函数深入理解

    本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . 一.MySQL中group_concat函数 完整的语法如下: gr ...

  10. MySQL中count函数使用方法详解

      count函数是用来统计表中或数组中记录的一个函数,下面我来介绍在MySQL中count函数用法与性能比较吧. count(*) 它返回检索行的数目, 不论其是否包含 NULL值. SELECT ...

随机推荐

  1. 关于Go你不得不知道的小技巧

    目录 Go 箴言 Go 之禅 代码 使用 go fmt 格式化 多个 if 语句可以折叠成 switch 用 chan struct{} 来传递信号, chan bool 表达的不够清楚 30 * t ...

  2. C温故补缺(十四):内存管理

    内存管理 stdlib库中有几个内存管理相关的函数 序号 函数和描述 1 void *calloc(int num, int size);在内存中动态地分配 num 个长度为size 个字节 的连续空 ...

  3. 2023年 DevOps 七大趋势

    随着时间的推移,很明显 DevOps 已经成为最高效的敏捷框架中的无人不知晓的名字.越来越多的企业(包括各类规模企业)正在采用 DevOps 方法来简化其运营效率.DevOps 的新时代趋势已经见证了 ...

  4. Spring Boot整合log4j实战(一):排除自带依赖、日志重定向、测试类验证

    〇.参考资料 1.springboot整合log4j全过程详解 https://blog.csdn.net/m0_60845963/article/details/123307232 2.Spring ...

  5. 【每日一题】【双指针、位运算】2022年2月3日-NC103 反转字符串

    描述 写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串.(字符串长度不超过1000) 答案:双指针 import java.util.*; public class Solution { ...

  6. ChatGPT杀疯了,这人工智能也太离谱了吧

    转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/2ac8440d.html 你好,我是测试蔡坨坨. 这几天被ChatGPT刷屏,各大网站平台都能看到关于它的文章和视频,上线短 ...

  7. Navicat Premium无法连接到oracle数据库的解决方法

    原因:Navicat Premium连不上oracle数据库一般是因为oci.dll文件的问题 解决方法:找到oracle安装路径中的oci.dll文件或者PL/SQL Developer安装路径中的 ...

  8. Jmeter 之模块控制器

    模块控制器作用: 模块控制器相当于python中的import 操作,即可以导入本线程组或者其他线程组下的控制器测试片段直接执行. 说明:被导入的测试片段可以是启用.禁用,导入后都将被执行. 字段解释 ...

  9. nuxt.js安装使用

    首先要学会看文档,https://www.nuxtjs.cn/guide/configuration 一.创建项目,并运行 终端运行 npx create-nuxt-app <项目名> ( ...

  10. PRIx64:uint64_t类型输出为十六进制格式

    #include <stdio.h> #include <stdint.h> #include <inttypes.h> int main(void) { uint ...