当前位置: 首页 > news >正文

《数据库系统》SQL语言之分组查询与分组过滤(理论理解分析+实例练习)

分组查询

SQL可以将检索到的元组按照某一条件进行分类,具有相同条件值的元组划到一个组或一个集合中,同时处理多个组或集合的聚集运算。
分组的基本语法:group by

EG: 求每一个学生的平均成绩
按照学号进行分组,学号相同的元组划到一个组中并求平均值。

select Snumber, avg(Score) from SC group by Snumber;

EG: 求每一门课程的平均成绩
按照课程号进行分组,课程号相同的元组划到一个组中并求平均值。

select Cnumber, avg(Score) from SC group by Cnumber;

分组过滤

聚集函数是不允许用于where子句中的:where子句是对每一元组进行条件过滤,而不是对集合进行条件过滤。(也就是说,where子句处理的对象是每一个元组;聚集函数处理的对象是集合,因此聚集函数不能放于where子句中
若要对集合(即分组)进行条件过滤,即满足条件的集合/分组留下,不满足条件的集合/分组剔除,则为 分组过滤
having子句,又称为分组过滤子句。需要有group by子句支持。(也就是说,没有group by子句,就没有having子句)

EG: 求不及格课程超过两门的同学的学号
首先筛选出不及格成绩(where Score < 60),其次将不及格课程成绩按照学号分组(group by Snumber,为一个学生的所有不及格课程成绩单),对这个分组内的个数进行判断(having Count(*) > 2)。

select Snumber from SC where Score < 60 
group by Snumber having Count(*) > 2;

EG: 求有10人以上不及格的课程号
首先筛选出不及格成绩(where Score < 60),其次将不及格课程成绩按照课程号分组(group by Cnumber,为一个课程的所有不及格课程成绩单),对这个分组内的个数进行判断(having Count(*) > 10)。

select Cnumber from SC where Score < 60
goup by Cnumber having Count(*) > 10;

having子句与where子句的区别

having子句where子句
作用对象每一分组/集合每一元组
条件必须有group by子句

EG: 求有两门以上不及格课程同学的学号以及平均成绩
❌错误示例:

select Snumber, avg(Score) from SC
where Score < 60 group by Snumber having count(*) > 2;

求解的为:
where子句得到的为“有两门以上不及格课程同学的集合”
则select选择后得到他们的学号和这些不及格课程的平均成绩

⭕正确示例:

select Snumber, avg(Score) from SC
where Snumber in(Select Snumber from SCwhere Score < 60group by Snumber having count(*) > 2)
group by Snumber;

求解的为:
嵌套select:筛选出不及格课程数大于2的所有学生的学号
外层select:则根据满足条件的学生学号进行分组,求他们所有课程的平均成绩

本文以哈尔滨工业大学战德臣老师讲授《数据库系统》为系统依据整理得出。具体可前往链接【哈工大】数据库系统 战德臣(全23讲)-哔哩哔哩

http://www.dtcms.com/a/548956.html

相关文章:

  • 家乡介绍网页设计海口seo网络推广
  • 【ROS2】动作服务器:rclcpp_action::Client 详解
  • 红松APP首秀北京老博会,“有温度的科技”赋能退休兴趣生活
  • 【ZEGO即构开发者日报】Soul AI Lab开源播客语音合成模型;腾讯混元推出国内首个交互式AI播客;ChatGPT Go向用户免费开放一年......
  • 数据库基础-数据库的三级模式
  • 图书馆网站建设调查问卷wordpress小工具自定义
  • 前端兼容性与调试技巧完全指南
  • 深度解析 Rust 的数据结构:标准库与社区生态
  • 关于组态软件的三个误解
  • 需要使用耐高温过炉治具的产品类型
  • qt QPushButton 启用选中状态(按钮可切换状态)
  • 河北云网站建设免费空间做网站
  • webrtc代码走读(十二)Transport-cc协议与RTP扩展头
  • 前端多版本零404部署实践:为什么会404,以及怎么彻底解决
  • k8s的包管理工具helm3--流程控制语句(3)
  • Kubernetes 实战入门核心内容总结
  • F042 A星算法课程推荐(A*算法) | 课程知识图谱|课程推荐vue+flask+neo4j B/S架构前后端分离|课程知识图谱构造
  • STM32H743-ARM例程34-BootROM
  • Parasoft C/C++test如何在ARM DS-5环境中进行测试(上)
  • 网站建设批复意见证券投资网站建设
  • 激光测距望远镜的光学设计
  • Unity3D与Three.js构建3D可视化模型技术对比分析
  • 【开发者导航】开源轻量的 Linux 平台设计协作客户端:Figma Linux
  • 从 “不敢练” 到 “实战练”!XM-E01-100 桌面五轴重构院校实训课堂
  • Rust 开发环境管理:安装与切换 Rust 版本的深度实践
  • 网站建设费用模板正规网站建设推荐
  • 学习笔记前言
  • 专业软件网站建设班级网站建设维护
  • day03(10.30)——leetcode面试经典150
  • MySQL8.0全栈初始化脚本集