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

五、多表连接查询——对分组结果进行过滤

五、多表连接查询——对分组结果进行过滤

1.什么是对分组结果进行过滤?

我们在对数据进行分组之后,得到了一张表,但是表内的数据如果不全是我们想要的,那该怎么办呢?数据过滤可以使用where关键字,但是这个where关键字的动作发生在数据分组汇总之前,此时如果想要对分组汇总之后的数据进行过滤的话,必须使用having关键字【在此处相当于where关键字的作用,但是where发生在数据分组汇总前,having发生在数据分组汇总后】。

2.示例:

(1)示例1

将分组汇总后的成绩高于80分的班级取出。

select class,avg(score) as avg_score from grade_score group by class having avg_score>60;

select class,avg(score) as avg_score from grade_score group by class having avg_score>80;

(2)示例2

将成绩大于80的同学进行分组统计平均分数并且取出平均成绩大于88分的班级与成绩。

第一层过滤where:过滤掉低于80分的同学的成绩。

第二层过滤having:对最终结果过滤掉低于88分的班级。

select class,avg(score) as avg_score from grade_score
where score>80 group by class having avg_score>88;

3.where和having的比较

where子句having
不能使用聚合函数可以使用聚合函数
group by分组汇总之前的过滤操作group by分组汇总之后的过滤操作
限制的行数据限制的是分的组

4.MySQL的执行顺序

(1)一个完整的MySQL语法

select [列名/聚合函数(列名)]
from 表名1,表名2,...[可以使用内连接或者外连接]
where [分组前过滤条件]
group by  [分组列]
having [分组后过滤条件]
order by [列(排序条件)];

(2)示例

select class,sum(score) as total_score 
from grade_score
where score>80 
group by class 
having total_score>300
order by total_score desc;

执行顺序:

<1>执行from子句,找到grade_score这张表;

<2>执行where子句,将grade_score表中符合score>80这个条件的数据给取出;

<3>执行group by子句,将数据根据class列分组汇总;

<4>执行having子句,将分组汇总后的数据根据total_score>300这个条件进行过滤;

<5>执行order by子句,把最终结果根据total_score的值由大到小进行排序;

<6>执行select子句,选择出所有数据。

注意:如果存在多表连接,那么在第一步就先找到对应的表,先执行多表连接,再进行where数据过滤,后续步骤相同

 

相关文章:

  • MSN Messenger无法登陆
  • 六、子查询——介绍
  • 上海ACM/ICPC归来
  • 六、子查询——简单子查询
  • 软件教育杂感
  • 六、子查询——多行子查询
  • linux下Anaconda的虚拟环境
  • C++陷阱一例
  • Xgboost的安装
  • 使用Opatch工具应用过渡性Patch
  • NAT模式设置正确,但是却ping不通外网
  • NAS进退两难?[zt]
  • Hive试验:表与原始数据不一致能否成功?
  • NAS:以数据为中心的数据存储模式[zt]
  • 实现Python的第一个程序
  • extract-text-webpack-plugin用法
  • Go 语言编译器的 //go: 详解
  • Java应用性能调优
  • jquery cookie
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Odoo domain写法及运用
  • Python socket服务器端、客户端传送信息
  • Python 反序列化安全问题(二)
  • Python语法速览与机器学习开发环境搭建
  • TCP拥塞控制
  • Vue全家桶实现一个Web App
  • 浮现式设计
  • 基于web的全景—— Pannellum小试
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 前端面试总结(at, md)
  • 前端性能优化--懒加载和预加载
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 数组大概知多少
  • 提醒我喝水chrome插件开发指南
  • 微服务核心架构梳理
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • Java总结 - String - 这篇请使劲喷我
  • UI设计初学者应该如何入门?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • $.ajax,axios,fetch三种ajax请求的区别
  • (20050108)又读《平凡的世界》
  • (70min)字节暑假实习二面(已挂)
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (搬运以学习)flask 上下文的实现
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (简单) HDU 2612 Find a way,BFS。
  • (四)c52学习之旅-流水LED灯
  • (四)汇编语言——简单程序
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转载)虚函数剖析
  • .Net 8.0 新的变化
  • .NET MVC第五章、模型绑定获取表单数据