mysql 查询优化--(分组,函数的应用)例子查找学生-课程成绩低于课程平均分的学生信息

本文主要是介绍mysql 查询优化--(分组,函数的应用)例子查找学生-课程成绩低于课程平均分的学生信息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

之前上课感觉group by 和 一张表变成两张表使用(类似 from user_class as uc1,user_class as uc2)没怎么学好,特此实验一番

user 表(用户即学生)
这里写图片描述
class表 课程表
这里写图片描述
user_class表 用户选课表
这里写图片描述

查询目的 课程成绩低于课程平均分的学生信息。

第一次尝试,实现简单效果

mysql> select uc.* from user_class as uc 
where uc.grade < (select avg(grade) from user_class as uc2 where uc2.c_id = uc.c_id);

显示效果:
查询到了需要的数据,找到了比平均分低的学生信息,这个sql只用到了两张虚拟表提供查询学生成绩和平均成绩作为对比。
这里写图片描述

第二次尝试现在需要把平均成绩显示出来

mysql> select uc.*,
(select avg(grade) from user_class as uc2 where uc2.c_id = uc.c_id) as avg_grade 
from user_class as uc 
where uc.grade < (select avg(grade) as avg_grade from user_class as uc2 where uc2.c_id = uc.c_id);

显示效果
虽然sql比较冗余,但是效果出来了。 想办法优化
这里写图片描述

第三次尝试通过之前的方法无法实现优化,现在换种思路

mysql> select uc.*,my.* from user_class as uc, 
(select c_id,avg(grade)  from user_class as uc group by uc.c_id) as my 
where uc.c_id = my.c_id ;

这里写图片描述

第四次尝试,实现简单显示优化

mysql> select uc.*,my.avg_grade from user_class as uc, 
(select c_id,avg(grade) as avg_grade from user_class as uc 
group by uc.c_id) as my 
where uc.c_id = my.c_id and uc.grade < my.avg_grade ;

这里写图片描述

最终显示效果优化

mysql> select user.name,uc.*,my.avg_grade,my.num as '选课人数' 
from user_class as uc,user , 
(select c_id,avg(grade) as avg_grade,count(grade) as num from user_class as uc group by uc.c_id) as my 
where uc.u_id = user.id and uc.c_id = my.c_id 
and uc.grade < my.avg_grade ;

这里写图片描述

主要用到的小功能是 ,一个user_class表在一个sql中可以起两次别名,uc1和uc2 一个用作查询用户信息,一个用作查询平均成绩使用,功能分离,还有就是avg和count函数的使用,相对简单,一开始那个冗余的sql 还是不要用了。

这篇关于mysql 查询优化--(分组,函数的应用)例子查找学生-课程成绩低于课程平均分的学生信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/388521

相关文章

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

MySQL中查找重复值的实现

《MySQL中查找重复值的实现》查找重复值是一项常见需求,比如在数据清理、数据分析、数据质量检查等场景下,我们常常需要找出表中某列或多列的重复值,具有一定的参考价值,感兴趣的可以了解一下... 目录技术背景实现步骤方法一:使用GROUP BY和HAVING子句方法二:仅返回重复值方法三:返回完整记录方法四:

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提