有三张表,学生表(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. 2022春每日一题:Day 33

    题目:[USACO 6.1.3] Cow XOR 没找到这题具体网址,这个题就是求最大异或区间(总长度尽量小,右端点尽量大) 嗯很显然一个[l,r]的异或和=s[r]s[l-1],那么现在有了优秀的n ...

  2. ThinkPHP 6.0 RC2 版本发布——架构升级、精简核心

    自从5.2版本变更为6.0以来,官方一直致力于优化架构和精简核心,同时也在准备手册和测试工作,在经过近1个月的开发迭代后,官方宣布发布ThinkPHP6.0RC2版本. 主要更新 相比较RC1版本更新 ...

  3. vmware workstation NAT模式配置

    一. 配置虚拟网络编辑器 1. 打开虚拟网络编辑器 2. 点击右下角更改设置 3. 选择NAT模式 点击选中NAT模式的虚拟网络,默认为VMnet8(可调整),可设置NAT模式的子网IP和掩码 4. ...

  4. std C++11 生成随机数组

    #include <algorithm> #include <array> #include <iostream> #include <iterator> ...

  5. .NET MAUI 安卓应用开发初体验

    一..NET MAUI开发环境搭建&安卓SDK和安卓模拟器安装提示网络连接失败问题解决 引言 本节目标是帮助第一次搭建.NET MAUI开发环境,在下载安卓SDK和安卓模拟器过程中一直提示网络 ...

  6. -webkit-box-orient:vertical 编译报错之autoprefixer问题

    由于各大浏览器的兼容问题,autoprefixer 插件 就可以帮我们自动补齐前缀.它和 less.scss 这样的预处理器不同,它属于后置处理器. 预处理器:在打包之前进行处理 后置处理器:在代码打 ...

  7. [Kogel.Subscribe.Mssql]SQL Server增量订阅,数据库变更监听

    此框架是SQL Server增量订阅,用来监听增删改数据库数据变更 目前仅支持SQL Server,Nuget上可以下载安装 或者使用Nuget命令添加包 dotnet add package Kog ...

  8. Flink SQL管理平台flink-streaming-platform-web安装搭建

    文章都在个人博客网站:https://www.ikeguang.com/ 同步,欢迎访问. 最近看到有人在用flink sql的页面管理平台,大致看了下,尝试安装使用,比原生的flink sql界面确 ...

  9. Day30.1:Math的常用方法

    Math 1.1 Math概述 Math类在Java.lang包下,不需要导包 public final class Math extends Object Math含有基本的数字运算方法,没有构造器 ...

  10. #define 的神奇操作

    # define 的神奇操作 一.宏定义中的 #.## 符号的神奇用法 1.1 # 的用法 1.1.1 作用 #表示字符串化操作符(stringification),其作用是将宏定义中的传入参数名转换 ...