I分组
DB 通用数据库具有基于表的特定列对数据进行分析的能力
可按照在 GROUP BY 子句中定义的组对行进行分组以其最简单的形式组由称为分组列的列组成 SELECT 子句中的列名必须为分组列或列函数列函数对于 GROUP BY 子句定义的每个组各返回一个结果下列示例产生一个列出每个部门编号的最高薪水的结果
SELECT DEPT MAX(SALARY) AS MAXIMUM
FROM STAFF
GROUP BY DEPT
此语句产生下列结果
注意计算的是每个部门(由 GROUP BY 子句定义的组)而不是整个公司的 MAX(SALARY)
II将 WHERE 子句与 GROUP BY 子句一起使用
分组查询可以在形成组和计算列函数之前具有消除非限定行的标准 WHERE 子句必须在GROUP BY 子句之前指定 WHERE 子句例如
SELECT WORKDEPT EDLEVEL MAX(SALARY) AS MAXIMUM
FROM EMPLOYEE
WHERE HIREDATE >
GROUP BY WORKDEPT EDLEVEL
ORDER BY WORKDEPT EDLEVEL
结果为
educitycn/img_///jpg >
注意在 SELECT 语句中指定的每个列名也在 GROUP BY 子句中提到未在这两个地方提到的列名将产生错误GROUP BY 子句对 WORKDEPT 和 EDLEVEL 的每个唯一组合各返回一行
III在 GROUP BY 子句之后使用 HAVING 子句
可应用限定条件进行分组以便系统仅对满足条件的组返回结果为此在GROUP BY 子句后面包含一个 HAVING 子句 HAVING 子句可包含一个或多个用 AND 和 OR 连接的谓词每个谓词将组特性(如 AVG(SALARY))与下列之一进行比较
该组的另一个特性
例如
HAVING AVG(SALARY) > * MIN(SALARY)
常数
例如
HAVING AVG(SALARY) >
例如下列查询寻找雇员数超过 的部门的最高和最低薪水
SELECT WORKDEPT MAX(SALARY) AS MAXIMUM MIN(SALARY) AS MINIMUM
FROM EMPLOYEE
GROUP BY WORKDEPT
HAVING COUNT(*) >
ORDER BY WORKDEPT
此语句产生下列结果
educitycn/img_///jpg >
有可能(虽然很少见)查询有 HAVING 子句但没有 GROUP BY 子句在此情况下DB 将整个表看作一个组因为该表被看作是单个组所以最多可以有一个结果行如果 HAVING 条件对整个表为真则返回选择的结果(该结果必须整个由列函数组成)否则不返回任何行