我地都知道sql 中 where 和 having 都是用来筛选条件的关键字。

而且having 一般和group by 一齐使用,   但是where 也可以用group by 一齐使用的。

下面用个简单例子讲解下:
有一张分数表Grade_1,   3个column 分别是 dep, name 和 grade,  如下图,好明显可以用部门dep来分组. 表中总共9条数据

下面语句是用来列出所有部门的总分。 并没有用到where 和 having 字句。

select dep as Dep,sum(grade)  as Sum_gradefrom Grade_1group by dep

可以见到3个组的总分都列出来了。 呢个唔难理解。

where 子句:
下面用1个where字句, 意思是列出所有部门分数大于或等于60分的人的总分

select dep as Dep,sum(grade)  as Sum_gradefrom Grade_1where grade >= 60group by dep

可以见到, 部门1 和 部门2的总分 都比上面的总分数减少了
是因为 where字句的作用,  语句在分组前 把第1组的  Allen(40分)
和 第二组的piero (45分) 排除掉了。
第一组和第二组实际上都是其余两个人的总分,

所以可总结出:
1. where字句用在group by之前。
2. where 作用于单个记录(行)
3. where 作用生效后(筛选后), group by分组才生效, 也就是where字句作用于 group by 之前。

Having 子句:
下面用1个Having字句, 意思是列出最低分数大于40的部门的总分

select dep as Dep,sum(grade)  as Sum_gradefrom Grade_1

group by dephaving min(grade) > 40

可以见到 结果把整个第一组排除出去了, 是因为
第一组有个人Allen的分数不大于40  也就是说  第一组的最低分是40, 不符合条件。

所以可总结出:
1. having 字句用在group by之后。
2. having 字句 作用于单个组(1行或多行)
3. group by 分组后,  才用having 子句来分组, 所以having字句作用在分组之后。

where 和 having 子句一齐使用:
下面语句就是上面两个条件一齐使用,

select dep as Dep,sum(grade)  as Sum_gradefrom Grade_1where grade >= 60group by dephaving min(grade) > 40

可以见到第一组又出来了,  之前不是说第一组的最低分是40吗?

答案都好简单,因为分组前 where字句先起作用, 把分数小于60的数据都排除出去了,
分组后
当having子句起作用时,  第一分组已经不包含小于60的数据(Allen), 所以第一分组这是的最低分是60(Jason),符合条件拉!

详解在group by分组查询中where 和 having的用法和区别。相关推荐

  1. SQL之Join的使用详解(附 :分组查询每组前N条记录)

    一.基本概念 关于sql语句中的连接(join)关键字,是较为常用而又不太容易理解的关键字,下面这个例子给出了一个简单的解释 –建表user1,user2: table1 : create table ...

  2. java中mysql分组查询_ES对应mysql的group by分组查询javaApi,多对多关系的分组查询...

    ES对应mysql的group by分组查询javaApi,多对多关系的分组查询 比如我这边有个下列订单索引数据,现在的需求是按用户(fmerchantId)和支付方式(fchannelId)进行分组 ...

  3. nslookup 包含在那个包中_nslookup详解(name server lookup)( 域名查询)

    一.总结 1.爬虫倒是很方便拿到页面数据:a.网页的页面源码我们可以轻松获得  b.比如cnsd博客,文章的正文内容全部放在当中,所以非常好获取,此时我们获取的是html的页面 c.html的数据自带 ...

  4. 斯坦福NLP名课带学详解 | CS224n 第10讲 - NLP中的问答系统(NLP通关指南·完结)

    作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://ww ...

  5. 斯坦福NLP名课带学详解 | CS224n 第11讲 - NLP中的卷积神经网络(NLP通关指南·完结)

    作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://ww ...

  6. 详解音视频直播平台搭建中的低延时

    详解音视频直播平台搭建中的低延时 音视频实时通讯的应用场景已经随处可见,从"吃鸡"的语音对讲.直播连麦.直播答题组队开黑,再到银行视频开户等.对于开发者来讲,除了关注如何能快速实现 ...

  7. 详解JPA 2.0动态查询机制:Criteria API

    转载自详解JPA 2.0动态查询机制:Criteria API-51CTO.若有侵权,请留言删除. 自从 JPA 于 2006 年首次被引入之后,它就得到了 Java 开发社区的广泛支持.该规范的下一 ...

  8. 详解JPA 2.0动态查询机制:Criteria API(2)

    详解JPA 2.0动态查询机制:Criteria API(2) 2009-11-13 09:24 Pinaki Poddar IBMDW 字号:T | T JPA 2.0引入了 Criteria AP ...

  9. mysql教程详解之多表联合查询_详解数据库多表连接查询的实现方法

    详解数据库多表连接查询的实现方法 通过连接运算符可以实现多个表查询.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 在关系数据库管理系统中,表建立时各数据之间的关系不必 ...

最新文章

  1. Apache MINA 2.0 用户指南
  2. YOLO 卷积层代码学习
  3. d3中文案例_D3.js柱状图例子
  4. maven安装以及eclipse配置maven
  5. Idea Maven报错找不到程序包
  6. WP7技巧 扩展【共享...】按钮
  7. 单个雪碧图多个图像资源你该如何解决它们的定位?
  8. 魅族 linux 手机,魅族flyme开源,能否再现linux辉煌,为什么要开源
  9. 重磅分享(二)——决策引擎实战部署
  10. auto_ptr个人用
  11. HashMap 排序题
  12. clonezilla使用_如何使用Clonezilla备份和恢复已死或即将死去的系统磁盘
  13. 机器人零力拖动技术路线
  14. wamp php打不开,wamp无法打开phpmyadmin
  15. maven 本地仓库的配置以及如何修改默认.m2仓库位置
  16. R语言入门——高质量保存图片(想毕业咋就那么难!!!)
  17. 20230419心情随记
  18. 餐饮数据的分析与挖掘(1)——数据采集
  19. 百度电子地图自定义marker图标
  20. 手持式设备产品的设计与交互

热门文章

  1. [专栏目录]-ATF/FF-A/specification学习 -- ongoing
  2. [ARM-assembly]-A64指令集合总结
  3. C++日志系统log4cxx使用总结
  4. Python编程实现粒子群算法(PSO)详解
  5. Windows驱动开发学习笔记(三)—— 内核空间内核模块
  6. MySQL配置教程(图解版)
  7. prometheus rfc3339 php date 转换
  8. xampp for Ubuntu安装.run文件
  9. 1.18 StringBuffer替换特殊字符
  10. Spring boot转发请求