where and having

转载 2007年09月19日 09:31:00

                                                                        where and having

快棋手(630255022) 13:50:33

用户在使用SQL语言的过程中可能希望解决的一个问题就是对由sum或其它集合函数运算结果的输出进行限制。例如,我们可能只希望看到Store_Information数据表中销售总额超过1500美圆的商店的信息,这时我们就需要使用HAVING从句。语法格式为:

SELECT "column_name1", SUM("column_name2")
FROM "table_name"
GROUP BY "column_name1"
HAVING (arithematic function condition)
(GROUP BY从句可选)
由此,我们可以使用如下命令实现上述查询目的:
SELECT store_name, SUM(sales)
FROM Store_Information
GROUP BY store_name
HAVING SUM(sales) > 1500

查询结果显示为:
store_name SUM(Sales)
Los Angeles $1800

小注:

SQL语言中设定集合函数的查询条件时使用HAVING从句而不是WHERE从句。通常情况下,HAVING从句被放置在SQL命令的结尾处。

 直接组织字符串就可以了,比如

dim strHaving as string
dim strSQL as string
strsql="select sum(fielda),fieldb from table group by fieldb"
strhaving = " having sum(fielda)>500"
strsql = strsql & strhaving

注意,进行按字段B进行汇总后,才把字段a的合计值大于500的列出来,而不是直接把所有字段b大于500的记录先列出来然后再汇总

 

 在同一查询中使用   HAVING   子句和   WHERE   子句  
  在某些情况下,在对作为一个整体的组应用条件之前(使用   HAVING   子句),可能需要从组中排除个别的行(使用   WHERE   子句)。  
   
  HAVING   子句与   WHERE   子句类似,但只应用于作为一个整体的组(即应用于在结果集中表示组的行),而   WHERE   子句应用于个别的行。查询可同时包含   WHERE   子句和   HAVING   子句。在这种情况下:    
   
  首先将   WHERE   子句应用于表中的个别行或关系图网格中的表结构化对象。只对符合   WHERE   子句条件的行进行分组。  
   
   
  然后将   HAVING   子句应用于由分组生成的结果集中的行。只有符合   HAVING   子句条件的组才出现在查询输出中。只能将   HAVING   子句应用于也出现在   GROUP   BY   子句或聚合函数中的列。    
  例如,假设联接   titles   和   publishers   表以创建一个查询,显示一组出版商出版的书的平均价格。只想看到一组特定出版商(可能只是加利福尼亚州   (CA)   的出版商)出版的书的平均价格。甚至只想看到超过   10.00   美元的平均价格。  
   
  在计算平均价格前,可以包含   WHERE   子句以建立第一个条件,该条件将放弃不在加利福尼亚州   (CA)   的出版商。第二个条件需要   HAVING   子句,因为该条件基于数据的分组和汇总结果。所得到的   SQL   语句可能象下面这样:  
   
  SELECT   titles.pub_id,   AVG(titles.price)  
  FROM   titles   INNER   JOIN   publishers  
        ON   titles.pub_id   =   publishers.pub_id  
  WHERE   publishers.state   =   'CA'  
  GROUP   BY   titles.pub_id  
  HAVING   AVG(price)   >   10  
  可在查询设计器的网格窗格中创建   HAVING   和   WHERE   子句。默认情况下,如果为列指定了搜索条件,该条件就成为   HAVING   子句的一部分。但可以将条件改为   WHERE   子句。  
   
  可以创建包含同一列的   WHERE   子句和   HAVING   子句。为此,必须将该列向网格窗格中添加两次,然后将一个实例指定为   HAVING   子句的一部分,将另一个实例指定为   WHERE   子句的一部分。  
   
  在聚合查询中指定   WHERE   条件    
   
  为查询指定组。有关详细信息,请参见对查询结果中的行分组。  
   
   
  如果网格窗格中还没有   WHERE   条件所基于的列,请添加该列。  
   
   
  清除"输出"列,除非数据列是   GROUP   BY   子句的一部分或包含在聚合函数中。  
   
   
  在"准则"列中指定   WHERE   条件。查询设计器将该条件添加到   SQL   语句的   HAVING   子句中。    
  注意       该过程示例中所显示的查询联接两个表:titles   和   publishers。    
   
  在此时的查询中,SQL   语句中包含   HAVING   子句:  
   
  SELECT   titles.pub_id,   AVG(titles.price)  
  FROM   titles   INNER   JOIN   publishers    
        ON   titles.pub_id   =   publishers.pub_id  
  GROUP   BY   titles.pub_id  
  HAVING   publishers.state   =   'CA'  
  在"分组"列中,从分组和汇总选项列表中选择"Where"。查询设计器将该条件从   SQL   语句的   HAVING   子句中删除并将其添加到   WHERE   子句中。    
  SQL   语句改为包含   WHERE   子句:  
   
  SELECT   titles.pub_id,   AVG(titles.price)  
  FROM   titles   INNER   JOIN   publishers    
        ON   titles.pub_id   =   publishers.pub_id  
  WHERE   publishers.state   =   'CA'  
  GROUP   BY   titles.pub_id  

ON、WHERE、HAVING的区别

ON 、WHERE、HAVING都能通过限制条件筛选数据,但他们的使用及其不同。下面我们来分析三者之间的区别。 1.       ON 和WHERE         所有的查询都回产生一个中间临时报表...
  • bruceyang2009lzu
  • bruceyang2009lzu
  • 2014年08月26日 13:41
  • 4631

当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序

当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序 2010-06-06 15:34 使用count(列名)当某列出现null值的时...
  • superhosts
  • superhosts
  • 2014年09月15日 21:14
  • 11995

hive:(group by, having;order by)的使用;group by+多个字段,以及wiki说的group by两种使用限制验证

hive上 查询 hive> select * from app_data_stats_historical where os='1' group by dt limit 100; 出现结果如下: 2...
  • longshenlmj
  • longshenlmj
  • 2014年03月24日 16:12
  • 14411

where和having的区别

  • 2014年01月13日 22:33
  • 2KB
  • 下载

基于TP框架SQL之where与having区别

  • 2016年11月09日 20:01
  • 19KB
  • 下载

sql中where和having 区别

  • 2014年05月19日 22:15
  • 27KB
  • 下载

where和having区别

  • 2011年05月31日 17:28
  • 2KB
  • 下载

sql中having和where的区别

“Where” 是一个约束声明,使用Where来约束来之数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数。 “Having”是一个过滤声明,是在查询返回结果集以后...
  • a_canghaiyisu
  • a_canghaiyisu
  • 2018年01月05日 10:48
  • 4

GROUP BY,WHERE,HAVING间的区别和用法

having子句与where都是过滤语句。 where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行...
  • longshenlmj
  • longshenlmj
  • 2014年01月02日 15:24
  • 1323

GROUP BY,WHERE,HAVING之间的区别和用法

having子句与where有相似之处但也有区别,都是设定条件的语句。 在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行.而where子句在查询过程中执...
  • q1512451239
  • q1512451239
  • 2016年11月09日 08:35
  • 115
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: where and having
举报原因:
原因补充:

(最多只允许输入30个字)