| DB2 通用数据库具有基于表的特定列对数据进行分析的能力。 |
可按照在 GROUP BY 子 的列组成。 SELECT 子句中 每个组各返回一个结果。下
|
句中定义的组对行进行分组。以 的列名必须为分组列或列函数。 列示例产生一个列出每个部门编
|
其最简单的形式,组由称为分组列 列函数对于 GROUP BY 子句定义的 号的最高薪水的结果:
|
SELECT DEPT, MA
|
X(SALARY) AS MAXIMUM
|
注意:计算的是每个部 。
|
门(由 GROUP BY 子句定义的组
|
)而不是整个公司的 MAX(SALARY)
|
| II、将 WHERE 子句与 GROUP BY 子句一起使用 |
分组查询可以在形成组和计算列函数 GROUP BY 子句之前指定 WHERE 子句。例
|
之前具有消除非限定行的标准 WHERE 子句。必须在 如:
|
SELECT WORKDEPT, EDLEVEL, M
|
AX(SALARY) AS MAXIMUM
|
| 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
|
有可能(虽然很少见) 整个表看作一个组。因为该 件对整个表为真,则返回选
|
查询有 HAVING 子句但没有 GRO 表被看作是单个组,所以最多可 择的结果(该结果必须整个由列
|
UP BY 子句。在此情况下,DB2 将 以有一个结果行。如果 HAVING 条 函数组成);否则不返回任何行。
|
|