having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前。而 having子句在聚合后对组记录进行筛选。我的理解就是真实表中没有此数据,这些数据是通过一些函数生存。

SQL实例:

一、显示每个地区的总人口数和总面积.
SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region

先以region把返回记录分成多个组,这就是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中
的不同字段(一或多条记录)作运算。

二、 显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。

SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
HAVING SUM(area)>1000000

在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。
相反,having子句可以让我们筛选成组后的各组数据

MySQL判断某个字段的长度:

select home_page from aaa表 where char_length(trim(home_page))<10 and char_length(trim(home_page))>1;

mysql中的where和having子句的区别
mysql中的where和having子句都可以实现过滤记录的功能,但他们的用法还是有一些区别的,看一例子:
用group by和having子句联合来查出不重复的记录,sql如下:
select uid,email,count() as ct from edm_user081217 GROUP BY email
然后看这个,就容易理解了
select uid,email,count(
) as ct from edm_user081217 GROUP BY email HAVING ct > 1
先用group by 对email进行分组,在用having来过滤大于1的,这样查找出来的就是重复的记录了.

以下是having和where的区别:
Select city FROM weather WHERE temp_lo = (SELECT max(temp_lo) FROM weather);
作用的对象不同。WHERE 子句作用于表和视图,HAVING 子句作用于组。
WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 HAVING 在分组和聚集之后选取分组的行。因此,WHERE 子句不能包含聚集函数; 因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。 相反,HAVING 子句总是包含聚集函数。(严格说来,你可以写不使用聚集的 HAVING 子句, 但这样做只是白费劲。同样的条件可以更有效地用于 WHERE 阶段。)
在前面的例子里,我们可以在 WHERE 里应用城市名称限制,因为它不需要聚集。 这样比在 HAVING 里增加限制更加高效,因为我们避免了为那些未通过 WHERE 检查的行进行分组和聚集计算
综上所述:
having一般跟在group by之后,执行记录组选择的一部分来工作的。
where则是执行所有数据来工作的。
再者having可以用聚合函数,如having sum(qty)>1000

2017-07-05 12:03:48更新:

我们来对比一下

SELECT ip,ip1,ip2,ip3,ip4,count() ct,mobile_info FROM lmaster_log
GROUP BY ip1,ip2,ip3 ORDER BY ip1,ip2,ip3,ip4 HAVING ct > 2;
SELECT ip,ip1,ip2,ip3,ip4,count(
) ct,mobile_info FROM lmaster_log
GROUP BY ip1,ip2,ip3 HAVING ct > 2 ORDER BY ip1,ip2,ip3,ip4;
一个语句

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'HAVING ct > 2' at line 2

语句2是出现结果,所以我们在使用order by时要注意,他的位置HAVING子句必须位于GROUP BY之后ORDER BY之前

转载于:https://blog.51cto.com/12955237/2096899

mysql having的用法相关推荐

  1. MySQL:讨人喜欢的 MySQL replace into 用法(insert into 的增强版)

    讨人喜欢的 MySQL replace into 用法(insert into 的增强版) 在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在: 2. 如果不存在,则插入:3.如果 ...

  2. 【node】express中mysql的基本用法、连接池的使用、事务的回滚

    [node]express中mysql的基本用法.连接池的使用 安装mysql包 mysql的配置信息 mysql基本操作 查询mysql并渲染数据 mysql插入操作 首先在html页面写上< ...

  3. Linux下Mysql的查询用法

    Linux下Mysql的查询用法 一.Mysql的delete删除语法 1.删除数据库 2.删除数据库的表 二.查询数据 1.基本查询 2.条件查询 三.数据库插入数据 1.创建新表 2.插入数据 四 ...

  4. MySQL replace into 用法

    MySQL replace into 用法(insert into 的增强版) 在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在: 2. 如果不存在,则插入:3.如果存在,则更新 ...

  5. Mysql临时表的用法 - 51CTO.COM

    Mysql临时表的用法 - 51CTO.COM Mysql临时表我们经常会用到,下面就为您详细介绍Mysql临时表的用法,供您参考,如果您对此方面感兴趣的话,不妨一看. 当工作在非常大的表上时,你可能 ...

  6. mysql中as用法

    重命名列名或者表名. as可理解为:用作.当成,作为:一般是重命名列名或者表名.(主要为了查询方便) 重命名列.如:表text, 列 column_1,column_2 你可以写成: 1 select ...

  7. mysql alter怎么用,mysql alter话语用法

    mysql alter语句用法 //主键 ALTER TABLE tablename add new_field_id int(5) UNSIGNED DEFAULT 0 NOT NULL anto_ ...

  8. pdo mysql limit_PHP mysql中limit用法详解(代码示例)

    在MySQL中,LIMIT子句与SELECT语句一起使用,以限制结果集中的行数.LIMIT子句接受一个或两个offset和count的参数.这两个参数的值都可以是零或正整数. offset:用于指定要 ...

  9. [转载]MySQL exists的用法介绍

    原文摘自:http://www.cnblogs.com/glory-jzx/archive/2012/07/19/2599215.html MySQL exists的用法介绍 有一个查询如下: 1 S ...

  10. mysql group concat 去重,MySQL group_concat() 函数用法

    MySQL group_concat() 函数用法 在使用 group by对数据进行分组后,如果需要对 select 的数据项进行字符串拼接,这时就需要用到group_concat()函数. 1.基 ...

最新文章

  1. oracle into多个变量,Oracle中merge into的使用:该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据....
  2. Linux 初始化之 Systemd机制
  3. ajax布林德,布林德重返阿贾克斯引热议,多面手为何在穆帅手里无作为
  4. 西奥妮·帕帕斯《天天数学》
  5. 你试过一个人旅游吗?去了哪里?
  6. php 改变地址栏,php如何修改url
  7. jpeglib画质的代码分析
  8. 联想笔记本S10电池拆解
  9. 肯德尔系数怎么分析_SPSS统计案例笔记16:相关分析之kendall系数
  10. 邱跃鹏:互联网下半场,腾讯云要做信息能源发动机
  11. 【项目管理/PMP/PMBOK第六版/新考纲】计算题24道带答案解析!
  12. CSS,文本溢出显示省略号
  13. 大数据典型的应用场景
  14. 纯css制作“破镜重圆”效果
  15. Win10 22H2 19045.2670系统原版镜像
  16. 数学知识整理:二重积分
  17. 关于SCI他引、自引、他引统计的小tip
  18. 函数式编程——python为例
  19. Sublist3r ---- 子域名枚举工具
  20. 深度分析Palantir的投资价值,Palantir2023年将实现强劲反弹?

热门文章

  1. ubuntu设置打开主目录(home文件夹)的快捷键
  2. mysql dbuild_config_技术分享 | MySQL Test 初探
  3. android 快捷方式 未安装该应用程序,android,解决手动创建的桌面快捷方式无法跳转到制定的activity的问题,提示未安装应用程序...
  4. 人工学院2卡顿_浙大宁波理工学院就业率怎么样 | 就业情况 | 前景好的专业
  5. php 判断字符串为时间,检查字符串是否为unix时间戳
  6. linux mvn m2目录,Maven C盘用户文件下没有.m2
  7. pytorch torchvision.datasets.ImageFolder
  8. flask v0.1 路由
  9. Introduction to Web MIDI
  10. 4.5 为什么使用深层表示