啰嗦点:

where子句用来筛选 from子句中指定的操作所产生的行。

group by 子句用来分组 where子句的输出。

having子句用来从分组的结果中筛选行。

对于可以在分组操作之前或之后应用的任何搜索条件,在 where子句中指定它们会更有效。这样可以减少必须分组的行数。应当在 having子句中指定的搜索条件只是那些必须在执行分组操作之后应用的搜索条件。

简单点:

select ··· from ···

where ···(只能对分组前的属性进行筛选)

group by ···

having ···(只能对分组后的每个组的整体属性进行筛选,用聚合函数体现)

以上四个命令是从大到小依次进行过滤

举个栗子:

我们如果就是查询每个部门成绩大于89的员工数,可以这样写:

SELECT dept,count(name) FROM user WHERE score>89 GROUP BY dept;

 上面用到where是在分组前限制,如何用having呢? 上面的基础上再加一个条件,查询部门人数大于1的部门。

那么我们是先要统计出每个部门的人数,也就是要用count聚合函数,然后再看哪些部门的人数是多于1人的

也就是筛选条件是在聚合之后的,这时where已不能满足使用,我们就需要用到having了

SELECT dept,count(name) nums FROM user GROUP BY dept HAVING nums >1;

  

注:

having后面跟的条件判断的字段必须是聚合函数返回的结果,否则sql会报错,例如:

SELECT dept,count(name) nums FROM user GROUP BY dept HAVING score >1;

参考:

https://blog.csdn.net/u013182960/article/details/80819505

http://www.cnblogs.com/doudouxiaoye/p/5798623.html

https://blog.csdn.net/qq_24556707/article/details/79552324

随机推荐

  1. python之文件的读写和文件目录以及文件夹的操作实现代码

    这篇文章主要介绍了python之文件的读写和文件目录以及文件夹的操作实现代码,需要的朋友可以参考下 为了安全起见,最好还是给打开的文件对象指定一个名字,这样在完成操作之后可以迅速关闭文件,防止一些无用 ...

  2. Educational Codeforces Round 63 (Rated for Div. 2)

    传送门 A. Reverse a Substring 题意: 给你一串 s,让你判断能否通过反转区间[l,r]的元素,使得反转后的串的字典序小于 s: 如果能,输出 "YES",并 ...

  3. Atcoder刷题小记

    1. 2019.4.27 agc016d 一道很坑的题. 首先判无解,求出异或值后排个序就可以. 然后直接让\(a_i\rightarrow b_i\)并查集维护,注意离散化和判重,答案加上联通块个数 ...

  4. ref、out参数

    ref和out都是表示按引用传递.与指针类似,直接指向同一内存. 按值传递参数的方法永远不可能改变方法外的变量,需要改变方法外的变量就必须按引用传递参数. 传递参数的方法,在C语言里,用指针.在C#里 ...

  5. zabbix 告警小试

    zabbix 告警小试 1. 实验内容简述 本次实验,旨在通过zabbix监控,实现对告警信息的实时通知,主要用到了zabbix中的item.trigger.action.user.user grou ...

  6. 九.django模型基础(三)之关联对象操作及多表查询

    Ⅰ.关系表的数据操作 1.正向 正向:如果一个模型有外键字段,通过这个模型对外键进行操作叫做正向. 1)更新(增) a.通过属性复制 b.通过主键的方式 总结: ForeignKey 字段的更新,跟普 ...

  7. 02--STL序列容器(Vector)

    一:vector容器简介 图片和顺序栈相似,但是vector数组是动态数组,支持随机存取--->但是在尾部添加或者溢出元素非常快速,中间插入删除费时 vector是将元素置于一个动态数组中加以管 ...

  8. docke 基本安装使用

    特性 容器 虚拟机 启动 秒级 分钟级 硬盘使用 一般为 MB 一般为 GB 性能 接近原生 弱 系统支持量 单机支持上千个容器 一般几十个 容器三大基本概念 镜像 image 容器 containe ...

  9. 关于macOS 管理员(Admin)权限问题。

    最近突然想改下用户名,于是在用户与组里解锁,然后两个手指点击用户那一行,更改fullname,不过出于好奇把uid和uuid也改了. 之后发现current user等级由Admin变成Standar ...

  10. 前端DES加密

    /** * DES加密/解密 * @Copyright Copyright (c) 2018 * @author mrDu * @see DESCore */ /* * encrypt the str ...