数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

SQL入门:分组


发布日期:2018年06月07日
 
SQL入门:分组

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 条件对整个表为真则返回选择的结果(该结果必须整个由列函数组成)否则不返回任何行

上一篇:数据库基础:了解最常见的13个数据库术语

下一篇:获取 SQL SERVER用户表信息游标