HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 和 SELECT 的交互方式类似。WHERE 搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。HAVING 子句可以引用选择列表中显示的任意项。

下面的示例按产品 ID 对 SalesOrderDetail 进行了分组,并且只包含那些订单合计大于 $1,000,000 且其平均订单数量小于 3 的产品组。

USE AdventureWorks;

GO

SELECT ProductID, AVG(OrderQty) AS AverageQuantity, SUM(LineTotal) AS Total

FROM Sales.SalesOrderDetail

GROUP BY ProductID

HAVING SUM(LineTotal) > $1000000.00

AND AVG(OrderQty) < 3 ;

GO

请注意,如果 HAVING 中包含多个条件,那么这些条件将通过 AND、OR 或 NOT 组合在一起。

若要查看总销量大于 $2,000,000 的产品,请使用下面的查询:

USE AdventureWorks;

GO

SELECT ProductID, Total = SUM(LineTotal)

FROM Sales.SalesOrderDetail

GROUP BY ProductID

HAVING SUM(LineTotal) > $2000000.00 ;

GO

下面是结果集:

ProductID   Total

----------- ----------------------

781         3864606.54937208

969         2010943.97244001

793         2897478.01200001

784         3699803.72383008

780         3880441.60780208

976         2079038.42948

795         2268057.09000002

783         4548164.01783709

779         4170215.3849281

782         5032968.13026809

794         2679200.01336002

753         2006264.4236

(12 row(s) affected)

若要确保对每种产品的计算中至少包含 1500 项,请使用 HAVING COUNT(*) > 1500 消除返回的销售总数小于 1500 项的产品。该查询类似于下面的示例:

USE AdventureWorks;

GO

SELECT ProductID, SUM(LineTotal) AS Total

FROM Sales.SalesOrderDetail

GROUP BY ProductID

HAVING COUNT(*) > 1500 ;

GO

理解应用 WHERE、GROUP BY 和 HAVING 子句的正确顺序对编写高效的查询代码会有所帮助:

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

GROUP BY 子句用来分组 WHERE 子句的输出。

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

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

Microsoft SQL Server 2005 查询优化器可以处理这些条件中的大多数条件。如果查询优化器确定 HAVING 搜索条件可以在分组操作之前应用,那么它就会在分组之前应用。查询优化器可能无法识别所有可以在分组操作之前应用的 HAVING 搜索条件。建议将所有这些搜索条件放在 WHERE 子句中,而不是 HAVING 子句中。

下面的示例显示了带有聚合函数的 HAVING 子句。它按产品 ID 分组 SalesOrderDetail 表中的行,并消除其平均订单数量小于/等于 5 的产品。

USE AdventureWorks;

GO

SELECT ProductID

FROM Sales.SalesOrderDetail

GROUP BY ProductID

HAVING AVG(OrderQty) > 5

ORDER BY ProductID ;

GO

下面的示例显示了不带聚合函数的 HAVING 子句。它按名称分组 ProductModel 表中的行,并消除那些不以 Mountain 开头的名称。

USE AdventureWorks;

GO

SELECT pm.Name, AVG(ListPrice) AS 'Average List Price'

FROM Production.Product AS p

JOIN Production.ProductModel AS pm

ON p.ProductModelID = pm.ProductModelID

GROUP BY pm.Name

HAVING pm.Name LIKE 'Mountain%'

ORDER BY pm.Name ;

GO

请注意,ORDER BY 子句可用于排序 GROUP BY 子句的输出。

SQL HAVING用法详解相关推荐

  1. php mysql sql mode_Mysql之SQL Mode用法详解_MySQL

    一.Mysql SQL Mode简介 通常来说MySQL服务器能够工作在不同的SQL模式下,并能针对不同的客户端以不同的方式应用这些模式.这样,应用程序就能对服务器操作进行量身定制以满足自己的需求.这 ...

  2. SQL语句 SELECT LIKE用法详解

    在SQL结构化查询语言中,LIKE语句有着至关重要的作用. LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用 ...

  3. sql语句中exists用法详解

    文章目录 一.语法说明 exists: not exists: 二.常用示例说明 1.查询a表在b表中存在数据 2.查询a表在b表中不存在数据 3.查询时间最新记录 4.exists替代distinc ...

  4. oracle中的exists 和 not exists 用法详解

    from:http://blog.sina.com.cn/s/blog_601d1ce30100cyrb.html oracle中的exists 和 not exists 用法详解 (2009-05- ...

  5. PowerShell攻防进阶篇:nishang工具用法详解

    PowerShell攻防进阶篇:nishang工具用法详解 导语:nishang,PowerShell下并肩Empire,Powersploit的神器. 开始之前,先放出个下载地址! 下载地址:htt ...

  6. exec 和 call 用法详解

    http://www.111cn.net/database/Oracle/39433.htm exec 和 call 用法详解 exec 和 call 执行一个procedure时, declare ...

  7. android搜索功能xml,Android_Android ActionBar搜索功能用法详解,本文实例讲述了Android ActionBar - phpStudy...

    Android ActionBar搜索功能用法详解 本文实例讲述了Android ActionBar搜索功能用法.分享给大家供大家参考,具体如下: 使用ActionBar SearchView时的注意 ...

  8. oracle中取反_oracle正则表达式regexp_like的用法详解

    oracle正则表达式regexp_like的用法详解 更新时间:2013年06月13日 17:42:05   作者: 本篇文章是对oracle正则表达式regexp_like的用法进行了详细的分析介 ...

  9. Oracle Merge Into 的用法详解实例

    Oracle merge into 的用法详解实例 作用:merge into 解决用B表跟新A表数据,如果A表中没有,则把B表的数据插入A表: 语法: MERGE INTO [your table- ...

最新文章

  1. python【力扣LeetCode算法题库】1160-拼写单词
  2. Py之pycocotools:pycocotools库的简介、安装、使用方法之详细攻略
  3. asp.net控件开发基础(20)
  4. STL源码剖析 lower_bound | upper_bound | binary_search
  5. UWP入门一 7天酒店客户端源码及说明
  6. JSP房屋租赁系统设计与实现答辩PPT免费下载
  7. NOIP2013华容道
  8. 2016年408考研算法题
  9. 瞬态抑制二极管 tvs 二极管参数选型
  10. 下手重了,我把同事小刘的腿打断了...
  11. 招聘数据采集+数据清洗与分析+数据可视化
  12. 【Python】列表解析式
  13. Android UI 冻结处理方法
  14. 商战传奇:周鸿祎死磕雷军的背后的三重玄机
  15. 高频因子在股票中的表现
  16. QPushButton去掉虚线框
  17. 写作业用白光还是暖白光?分享色温4000K暖白光的护眼台灯
  18. ubuntu10.10下更新无线网卡驱动
  19. 【课程设计|MFC】人民币大小写转换(含课程报告+源码)
  20. Qt中使用qrc管理和使用资源文件(转)

热门文章

  1. StableDiffusion嵌入现实世界,能在墙上直接长出小猫咪,手机可玩
  2. H5实战(一):照片墙效果
  3. 详细验证身份证号码规则和姓名(汉字)的java代码
  4. cmd中文乱码,输入chcp 65001
  5. Microsoft office2019下载安装步骤图文教程
  6. rosbag转化为MP4格式视频
  7. WebLogic 配置JNDI数据源
  8. MySQL数据库 - 连接查询
  9. 传统节日被淡化 老外:圣诞节在中国流行不可思议
  10. ss一键搭建php,#二次更新# 基于宝塔面板开发SSPANEL魔改V3一键脚本