SQL中Having与Where的区别及注意

区别介绍:

where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行。

having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。

注意:

1、HAVING子句必须位于GROUP BY之后ORDER BY之前。

2、WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句。

3、HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句。

示例 :

select 类别, sum(数量) as 数量之和 from A group by 类别 having sum(数量) > 18

示例:Having和Where的联合使用方法

select 类别, SUM(数量)from A where 数量 > 8 group by 类别 having SUM(数量) > 10

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

(0)

相关推荐

  • mysql中group by与having合用注意事项分享

    group by函数应该的使用应该是SELECT 列表中指定的每一列也必须出现在 GROUP BY 子句中,除非这列是用于聚合函数,但是今天帮同事调试一个mysql中的group by函数,让我大跌眼镜,当时感觉不可思议,然后回来做了个简化版试验,试验过程如下: mysql表结构 复制代码 代码如下: mysql> desc t;+---+----–+--+-–+---+---+| Field | Type | Null | Key | Default | Extra |+---+----–+-

  • SQL 中having 和where的区别分析

    在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集.groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果. 在带有groupby子句的查询语句中,在select列表中指定的列要么是groupby子句中指定的列,要么包含聚组函数 复制代码 代码如下: selectmax(sal),jobempgroupbyjob; (注意max

  • SQL中Having与Where的区别

    含义 where 在分组之前就进行选择操作 having having在分组操作之后才进行选择操作,所以having可以选择聚合函数 eg: // 下面这句是可以的 SELECT COUNT(*) FROM A WHERE A.a1>0 GROUP BY a2: //但是下面就不行 SELECT COUNT(*) FROM A WHERE A.a1>0 and count(*)>1 GROUP BY a2: //必须要改为having SELECT COUNT(*) FROM A WHE

  • SQL中WHERE变量IS NULL条件导致全表扫描问题的解决方法

    复制代码 代码如下: SET @SQL = 'SELECT * FROM Comment with(nolock) WHERE 1=1    And (@ProjectIds Is Null or ProjectId = @ProjectIds)    And (@Scores is null or Score =@Scores)' 印象中记得,以前在做Oracle开发时,这种写法是会导致全表扫描的,用不上索引,不知道Sql Server里是否也是一样呢,于是做一个简单的测试1.建立测试用的表结

  • MySql中having字句对组记录进行筛选使用说明

    having的用法 having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前.而 having子句在聚合后对组记录进行筛选. SQL实例: 一.显示每个地区的总人口数和总面积 SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region 先以region把返回记录分成多个组,这就是GROUP BY的字面含义.分完组后,然后用聚合函数对每组中的不同字段

  • php SQL之where语句生成器

    复制代码 代码如下: //生成where字符串 function get_where($arg = null) { foreach ((array)$arg as $key => $val) { if(is_int($key)) { $where .= " $val "; }else { if(is_string($val)) { if($val === null) { $where .= " and $key is null "; }else { $wher

  • sql语句中where和having的区别

    HAVING是先分组再筛选记录,WHERE在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前:而 HAVING子句在聚合后对组记录进行筛选. 作用的对象不同.WHERE 子句作用于表和视图,HAVING 子句作用于组.WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 HAVING 在分组和聚集之后选取分组的行.因此,WHERE 子句不能包含聚集函数: 因为试图用聚集函数判断那些行输入给聚集运算是没有意义的. 相反,HAVING 子句总是

  • sql语句中where 1=1的作用

    在看程序时时,发现基本只要是拼凑的SQL语句,基本上都会这样写: where 1 = 1 上网查了下原因:不能确定where后面是否有语句的时候就要加上1=1了,当没有其他条件语句时候,还有1=1,就不会输错了 . ps:本人理解,后面的判断语句方便加写and id=8 and cid=9 等一些判断,不用判断是不是select * from table 后面有没有where,本人理解,知道的朋友,可以说下,谢谢

  • SqlServer参数化查询之where in和like实现详解

    身为一名小小的程序猿,在日常开发中不可以避免的要和where in和like打交道,在大多数情况下我们传的参数不多简单做下单引号.敏感字符转义之后就直接拼进了SQL,执行查询,搞定.若有一天你不可避免的需要提高SQL的查询性能,需要一次性where in 几百.上千.甚至上万条数据时,参数化查询将是必然进行的选择.然而如何实现where in和like的参数化查询,是个让不少人头疼的问题. where in 的参数化查询实现 首先说一下我们常用的办法,直接拼SQL实现,一般情况下都能满足需要 复

  • MySQL无GROUP BY直接HAVING返回空的问题分析

    有一张表,id是主键,这样的写法可以返回一条记录: 复制代码 代码如下: "SELECT * FROM t HAVING id=MIN(id);" 但是只是把MIN换成MAX,这样返回就是空了: 复制代码 代码如下: "SELECT * FROM t HAVING id=MAX(id);" 这是为什么呢?我们先来做个试验,验证这种情况.这是表结构,初始化两条记录,然后试验: 复制代码 代码如下: root@localhost : plx 10:25:10> s

随机推荐