GZICP.com   
 
    返回首页
    联系我们
 
 
     

SQL入门:分组

www.gzicp.com   2004年7月9日 15:54:11
 
  I、分组                                                                      
  DB2 通用数据库具有基于表的特定列对数据进行分析的能力。                   

  可按照在 GROUP BY 子
的列组成。 SELECT 子句中
每个组各返回一个结果。下
句中定义的组对行进行分组。以
的列名必须为分组列或列函数。
列示例产生一个列出每个部门编
其最简单的形式,组由称为分组列
列函数对于 GROUP BY 子句定义的
号的最高薪水的结果:


   SELECT DEPT, MA
X(SALARY) AS MAXIMUM
   FROM STAFF                                          
   GROUP BY DEPT                                    

  此语句产生下列结果:                                                         
   

  注意:计算的是每个部

门(由 GROUP BY 子句定义的组

)而不是整个公司的 MAX(SALARY)



  II、将 WHERE 子句与 GROUP BY 子句一起使用                  

  分组查询可以在形成组和计算列函数
GROUP BY 子句之前指定 WHERE 子句。例
之前具有消除非限定行的标准 WHERE 子句。必须在
如:

   SELECT WORKDEPT, EDLEVEL, M
AX(SALARY) AS MAXIMUM
   FROM EMPLOYEE                                    
   WHERE HIREDATE > '1979-01-01'

   GROUP BY WORKDEPT, EDLEVEL          
   ORDER BY WORKDEPT, EDLEVEL          
                                                                               

  结果为:                                                                      
   


  注意:在 SELECT 语句
到的列名将产生错误。GROU

中指定的每个列名也在 GROUP B
P BY 子句对 WORKDEPT 和 EDLE

Y 子句中提到。未在这两个地方提
VEL 的每个唯一组合各返回一行。



  III、在 GROUP BY 子句之后使用 HAVING 子句                

  可应用限定条件进行分组,以便系统
句后面包含一个 HAVING 子句。 HAVING
每个谓词将组特性(如 AVG(SALARY))与
仅对满足条件的组返回结果。为此,在GROUP BY 子
子句可包含一个或多个用 AND 和 OR 连接的谓词。
下列之一进行比较:


  该组的另一个特性                                                             

  例如:                                                                       

  HAVING AVG(SALARY) > 2 * MIN(SALARY)



  常数                                                                         

  例如:                                                                       

   HAVING AVG(SALARY) > 20000


  例如,下列查询寻找雇员数超过 4 的部门的最高和最低薪水:                   

   SELECT WORKDEPT
, MAX(SALARY) AS MAXIMUM, MI
N(SALARY) AS MINIMUM
   FROM EMPLOYEE                                    
   GROUP BY WORKDEPT                            
   HAVING COUNT(*) > 4

   ORDER BY WORKDEPT                            

  此语句产生下列结果:                                                          

   


  有可能(虽然很少见)
整个表看作一个组。因为该
件对整个表为真,则返回选

查询有 HAVING 子句但没有 GRO
表被看作是单个组,所以最多可
择的结果(该结果必须整个由列

UP BY 子句。在此情况下,DB2 将
以有一个结果行。如果 HAVING 条
函数组成);否则不返回任何行。

 
 

ChinaITLab 

相关文章
·SQL入门:使用函数(2004年07月09日)
·SQL入门:使用子查询(2004年07月09日)
·SQL入门:从多个表中选择数据(2004年07月09日)
·SQL入门:给表达式命名(2004年07月05日)
·SQL入门:使用表达式来计算值(2004年07月05日)
·SQL入门:运算次序(2004年07月05日)
·SQL入门:除去重复行(2004年07月05日)
·SQL入门:将行进行排序(2004年07月05日)
·SQL入门:选择行(2004年07月05日)
·SQL入门:选择列(2004年07月05日)
·SQL入门:创建视图(2004年06月30日)
·SQL入门:删除数据(2004年06月30日)
·SQL入门:更改数据(2004年06月30日)
·SQL入门:插入数据(2004年06月30日)
·SQL入门:创建表(2004年06月30日)
·SQL入门:数据类型(2004年06月28日)
·SQL入门:模式(2004年06月28日)
·SQL入门:视图(2004年06月28日)
·SQL入门:表(2004年06月28日)
最新文章
·防范SQL注入式攻击  (2004年09月05日)
·SQL injection的实现与应用  (2004年09月04日)
·SQL入门:目录视图的介绍  (2004年07月15日)
·SQL入门:大对象 (LOB)  (2004年07月15日)
·SQL入门:用户定义函数  (2004年07月15日)
·SQL入门:用户定义类型  (2004年07月15日)





 
 
Copyright © 1999-2008 GZICP.com All Rights Reserved