当前位置:  数据库>sqlserver

sql having子句应用举例

    来源: 互联网  发布时间:2014-08-29

    本文导语:  HAVING 子句用于选择行。 HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 子句和 SELECT 语句交互的方式类似。 WHERE 子句搜索条件在进行分组操作之前应用; 而 HAVING 搜索条件在进行分组操作之后应用。HAVING 语法与 WHERE 语法类...

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

来看一个例子,查询得到本年度截止到目前的销售额超过 $40,000 的出版商:

USE pubs
SELECT pub_id, total = SUM(ytd_sales)
FROM titles
GROUP BY pub_id
HAVING SUM(ytd_sales) > 40000

结果集:
pub_id total     
------ -----------
0877   44219     
(1 row(s) affected)

为了确保对每个出版商的计算中至少包含六本书,以下的sql使用 HAVING COUNT(*) > 5 消除返回的总数小于六本书的出版商:

USE pubs
SELECT pub_id, total = SUM(ytd_sales)
FROM titles
GROUP BY pub_id
HAVING COUNT(*) > 5

结果集:
pub_id total     
------ -----------
0877   44219     
1389   24941     
(2 row(s) affected)

理解应用 WHERE、GROUP BY 和 HAVING 子句的正确序列对编写高效的查询代码会有所帮助:
1)、WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。
2)、GROUP BY 子句用来分组 WHERE 子句的输出。
3)、HAVING 子句用来从分组的结果中筛选行。
对于可以在分组操作之前或之后应用的搜索条件,在 WHERE 子句中指定它们更有效。这样可以减少必须分组的行数。应当在 HAVING 子句中指定的搜索条件只是那些必须在执行分组操作之后应用的搜索条件。

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

以下的sql语句显示包含聚合函数的 HAVING 子句。
该子句按类型分组 titles 表中的行,并且消除只包含一本书的组:

USE pubs
SELECT type
FROM titles
GROUP BY type
HAVING COUNT(*) > 1

结果集:
type
------------------
business
mod_cook
popular_comp
psychology
trad_cook
(5 row(s) affected)

以下是没有聚合函数的 HAVING 子句的示例。
该子句按类型分组 titles 表中的行,并且消除不是以字母 p 开头的那些类型。

USE pubs
SELECT type
FROM titles
GROUP BY type
HAVING type LIKE 'p%'

结果集:
type
------------------
popular_comp
psychology
(2 row(s) affected)

如果 HAVING 中包含多个条件,那么这些条件将通过 AND、OR 或 NOT 组合在一起。
以下的sql显示如何按出版商分组 titles,只包括那些标识号大于 0800、支付的总预付款已超过 $15,000 且销售书籍的平均价格小于 $20 的出版商。

SELECT pub_id, SUM(advance) AS AmountAdvanced,
       AVG(price) AS AveragePrice
FROM pubs.dbo.titles
WHERE pub_id > '0800'
GROUP BY pub_id
HAVING SUM(advance) > $15000
   AND AVG(price) < $20

ORDER BY 可以用来为 GROUP BY 子句的输出排序。下面的示例显示使用 ORDER BY 子句以定义返回 GROUP BY 子句中的行的顺序:

SELECT pub_id, SUM(advance) AS AmountAdvanced,
       AVG(price) AS AveragePrice
FROM pubs.dbo.titles
WHERE pub_id > '0800'
  AND price >= $5
GROUP BY pub_id
HAVING SUM(advance) > $15000
   AND AVG(price) < $20
ORDER BY pub_id DESC

注意:where后面是不可跟聚会函数( 一种函数,它对一组行中的某个列执行计算,并返回单个值如count()  sum() )。

有关sql中having子句的例子,就介绍到这里,希望对大家有所帮助。


    
 
 

您可能感兴趣的文章:

  • sql语句之WHERE子句用法
  • sql server 2005 output子句应用举例
  • sql语句排序子句order by用法实例
  • sql语句之ORDER BY 子句用法
  • T-SQL实例 在where子句中使用and操作符
  • sql server中Exists的用法举例
  • sql多表级联更新update的用法举例
  • sql count查询举例(图文)
  • sql server 存储过程中If Else的用法举例
  • asp批量更新sql语句举例
  • sql语句中exists用法举例
  • SQL Server分组排序提取数据的代码举例
  • sql server中distinct筛选重复记录的用法举例
  • 用java访问SQL数据库应做些什么工作,步骤,并请用代码举例?
  • SQL预处理语句(Prepared Statements)用法举例
  • SQL常用语句举例
  • T-SQL实例 列别名的用法举例
  • sql server分页存储过程应用举例
  • sql查询重复记录的方法举例
  • sql server 模糊查询的常用方法举例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • SQL高级应用之使用SQL查询Excel表格数据的方法
  • sql递归查询代码(cte应用)
  • SQL2000个人版 应用程序正常初始化失败0乘以C0000135失败
  • Sql Server 分组统计并合计总数及WITH ROLLUP应用
  • 有关sql server条件语句之IF应用实例
  • SQL高级应用之同服务器上复制表到另一数据库中并实现去重复
  • Oracle创建主键自增表(sql语句实现)及触发器应用
  • 如何建立一个连接数据库的应用?例如连接access、和sql sever.
  • sql语句单引号与双引号区别和应用
  • 请问各位朋友:在JAVA的数据库应用管理系统中,如何不在操作系统忠建立数据源便能连接数据库(如ACCESS、MS SQL 等等
  • 请问各位朋友:在JAVA的数据库应用管理系统中,如何不在操作系统忠建立数据源便能连接数据库(如ACCESS、MS SQL 等等)?
  • SQL Server正则表达式 替换函数应用详解
  • 浅析SQL语句行列转换的两种方法 case...when与pivot函数的应用
  • sql时间格式化输出、convert函数应用示例
  • sql时间格式化输出、Convert函数应用示例
  • SQL Server控制语句的基本应用
  • SQL Server数据库bcp导出备份文件应用示例
  • 应用程序中的一条sql语句
  • sql 单引号,双引号的灵活应用指南
  • Oracle与SQL Server在企业应用的比较
  • java命名空间java.sql接口statement的类成员方法: executeupdate定义及介绍
  • 请问,这是什么错误!java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][Named Pipes]??????? SQL Server?虽然分少,但一定给,只要您是前5名回复者中最好的以为!
  • java命名空间java.sql接口connection的类成员方法: nativesql定义及介绍
  • SQL查询分析工具 SQL Workbench/J
  • java命名空间java.sql接口preparedstatement的类成员方法: executeupdate定义及介绍
  • oracle导出sql语句的结果集和保存执行的sql语句(深入分析)
  • java命名空间java.sql接口rowid的类成员方法: getbytes定义及介绍
  • SQL Server统计SQL语句执行时间的脚本
  • java命名空间java.sql接口ref的类成员方法: getbasetypename定义及介绍
  • SQL客户端软件 PKLite SQL Client
  • java命名空间java.sql接口databasemetadata的类成员方法: getsqlkeywords定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3