`

Having语句的使用

阅读更多

Having语句的使用:

 

使用 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)
为了确保对每个出版商的计算中至少包含六本书,下面示例使用 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 子句的正确序列对编写高效的查询代码会有所帮助:
WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。

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

HAVING 子句用来从分组的结果中筛选行。
对于可以在分组操作之前或之后应用的搜索条件,在 WHERE 子句中指定它们更有效。这样可以减少必须分组的行数。应当在 HAVING 子句中指定的搜索条件只是那些必须在执行分组操作之后应用的搜索条件。
Microsoft® SQL Server™ 2000 查询优化器可处理这些条件中的大多数。如果查询优化器确定 HAVING 搜索条件可以在分组操作之前应用,那么它就会在分组之前应用。查询优化器可能无法识别所有可以在分组操作之前应用的 HAVING 搜索条件。建议将所有这些搜索条件放在 WHERE 子句中而不是 HAVING 子句中。
以下查询显示包含聚合函数的 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 组合在一起。以下示例显示如何按出版商分组 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()

分享到:
评论

相关推荐

    having语句的用法

    同时,你可以在同一个查询中同时使用`WHERE`和`HAVING`子句,`WHERE`先执行,`HAVING`后执行。 在查询设计器中,你可以直观地创建和编辑`WHERE`和`HAVING`子句。通常,当你在网格窗格中为列指定搜索条件时,系统会...

    MySQL中无GROUP BY情况下直接使用HAVING语句的问题探究

    然而,当没有 `GROUP BY` 子句时,直接使用 `HAVING` 可能会导致非预期的行为。这个问题的探讨主要集中在 `HAVING` 后面直接跟一个聚合函数如 `MIN` 或 `MAX` 的情况下。 首先,我们来理解 `HAVING` 语句的作用。`...

    C#为使用having语句进行多表查询

    首先,HAVING语句是在SQL中用于对聚合函数的结果进行筛选,通常与GROUP BY语句一起使用。在C#中,我们可以借助ADO.NET库来执行这样的SQL查询。ADO.NET提供了SqlConnection、SqlCommand、SqlDataAdapter和DataSet等类...

    50个经典SQL语句

    该语句使用了GROUP BY语句和HAVING语句,首先将成绩表数据分组,然后使用HAVING语句筛选出平均成绩大于60分的组。 * 查询所有同学的学号、姓名、选课数、总成绩: 该语句使用了LEFT OUTER JOIN语句,连接学生表和...

    SQL语句使用教程

    本教程针对的是"SQL语句使用教程",特别关注MySQL数据库系统,这是一套广泛使用的开源数据库解决方案。通过本教程的学习,你将能够熟练掌握SQL的基本概念、语法以及在实际中的应用。 首先,让我们从基础开始,了解...

    where和having的区别

    这里首先通过`WHERE`子句排除部门10,再通过`GROUP BY`对剩余部门进行分组,并使用`HAVING`子句进一步筛选出工资总和超过8000的部门。 #### 7. 总结 通过以上分析可以看出,`WHERE`和`HAVING`子句虽然都用于过滤...

    oracle语句优化.docx

    本文将详细地介绍 Oracle 语句优化的方法和技巧,涵盖多表关联、EXISTS 和 IN 语句的使用、INDEX_JOIN 优化、WHERE 和 HAVING 语句的区别、NOT IN 和 &lt;&gt; 操作符的使用、LIKE 操作符的替代、UNION 操作符的优化、SQL ...

    2-SQL查询语句1

    该查询语句使用了多表连接和子查询来查询所有心血管内科的专家号医生。首先,它使用 `select distinct` 语句来查询 `doctorName` 列,接着使用 `from` 语句指定查询的表为 `03doctors`。然后,它使用 `where` 语句来...

    asp中SQL语句 的使用

    除了基本操作,还可以使用SQL的其他特性,如JOINs用于合并多个表的数据,GROUP BY和HAVING用于分组和筛选,ORDER BY用于排序结果,以及子查询和联接操作等。 在ASP中,还可以使用参数化查询来防止SQL注入攻击,提高...

    2021年数据库题库语句题.docx

    * HAVING语句:使用HAVING语句对分组后的数据进行过滤,包括分组函数、比较运算符等。 三、数据类型 * 数值类型:包括整数、浮点数、定点数等,了解每种类型的特点和使用场景。 * 字符串类型:包括char、varchar、...

    利用having语句过滤分组数据,C#实例

    摘要:C#源码,数据库应用,分组数据 C#源码实例——利用having语句过滤分组数据,按部门计算平均工资,对having语句不熟悉的C#朋友,可参考一下,having用法也是值得学习的,作为一名优秀的程序员,熟悉各种数据库...

    使用Oracle查询并删除重复记录的SQL语句

    使用Oracle查询并删除重复记录的SQL语句 在实际应用中,删除重复记录是非常常见的操作,特别是在数据导入、数据整合和数据清洁等场景中。Oracle数据库提供了多种方式来查询和删除重复记录,本文将详细介绍这些方法...

    SQL数据库常用语句

    这个语句使用了 `isnull` 函数来处理出生日期为空值的情况,並使用 `convert` 函数将日期格式化为 yyyy-mm-dd。 2. 查找与喻自强在同一个单位的员工信息 接下来,我们来看一个 slightly 更复杂的查询语句,用于...

    SQL查询语句精华使用简要

    此外,还可以结合使用`GROUP BY`进行数据分组,`HAVING`过滤分组后的结果,`ORDER BY`对结果进行排序,`JOIN`操作连接不同表,`UNION`和`INTERSECT`合并或找出不同表的交集。SQL查询语句的灵活性和强大性使其成为...

    全国计算机二级(vf)sql语句练习

    * having语句的使用:对分组后的数据进行筛选。 知识点4:子查询 ----------------- * select语句的嵌套使用:在一个select语句中嵌套另一个select语句,以便从结果中选择数据。 知识点5:数据聚合 -------------...

    sql语句使用手册收集

    SQL(Structured Query Language)是用于管理和...总的来说,"sql语句使用手册"将引导你深入理解SQL的各种概念和用法,无论你是初学者还是经验丰富的开发者,都能从中获益匪浅,提升你在数据库管理和应用开发中的技能。

    SQL语句基础教程

    * 数据聚合:使用GROUP BY和HAVING语句对数据进行聚合 SQL语法详解 ------------- ### SELECT指令 SELECT指令是SQL语言的基础,用于从数据库中的表格内选出资料。SELECT指令的语法结构如下: SELECT "栏位名" ...

    SQL语句在审计

    4、灵活运用SQL语句使用计算列。在进行审计数据分析和查询时经常需要对查询的数据进行再计算,这里审计人员可充分运用SELECT语句的功能来直接使用计算列对审计数据进行运算,而计算列并不存在于表格所存储的数据中,...

Global site tag (gtag.js) - Google Analytics