加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver 中group by的用法

发布时间:2020-12-12 13:20:52 所属栏目:MsSql教程 来源:网络整理
导读:sql server中group by语句的用法。 group by 分组? 通用数据库具有基于表的特定列对数据进行分析的能力。 可按照在 GROUP BY 子句中定义的组对行进行分组。 以其最简单的形式,组由称为分组列的列组成。 SELECT 子句中的列名必须为分组列或列函数。 列函数对

sql server中group by语句的用法。

group by 分组?
通用数据库具有基于表的特定列对数据进行分析的能力。
可按照在 GROUP BY 子句中定义的组对行进行分组。
以其最简单的形式,组由称为分组列的列组成。
SELECT 子句中的列名必须为分组列或列函数。
列函数对于 GROUP BY 子句定义的每个组各返回一个结果。

下列示例产生一个列出每个部门编号的最高薪水的结果:?
?

复制代码代码示例: SELECT DEPT,MAX(SALARY) AS MAXIMUM FROM STAFF GROUP BY DEPT

?此语句产生下列结果:
?

DEPT MAXIMUM?
?------ ---------?
? 10 22959.20?
? 15 20659.80?
? 20 18357.50?
? 38 18006.00?
? 42 18352.80?
? 51 21150.00?
? 66 21000.00?
? 84 19818.00

注意:计算的是每个部门(由 GROUP BY 子句定义的组)而不是整个公司的 MAX(SALARY)。 将 WHERE 子句与 GROUP BY 子句一起使用 分组查询可以在形成组和计算列函数之前具有消除非限定行的标准 WHERE 子句。必须在GROUP BY 子句之前指定 WHERE 子句。
例如:

复制代码代码示例: SELECT WORKDEPT,EDLEVEL,MAX(SALARY) AS MAXIMUM
?FROM EMPLOYEE WHERE HIREDATE > '1979-01-01'?
?GROUP BY WORKDEPT,EDLEVEL?
?ORDER BY WORKDEPT,EDLEVEL

结果为:

WORKDEPT EDLEVEL MAXIMUM?
-------- ------- -----------
??? D11 17 18270.00
??? D21 15 27380.00
??? D21 16 36170.00?
??? D21 17 28760.00?
??? E11 12 15340.00?
??? E21 14 26150.00?
?

注意:
在 SELECT 语句中指定的每个列名也在 GROUP BY 子句中提到。未在这两个地方提到的列名将产生错误。
GROUP BY 子句对 WORKDEPT 和 EDLEVEL 的每个唯一组合各返回一行。?
在 GROUP BY 子句之后使用 HAVING 子句 可应用限定条件进行分组,以便系统仅对满足条件的组返回结果。

为此,在GROUP BY 子句后面包含一个 HAVING 子句。
?HAVING 子句可包含一个或多个用 AND 和 OR 连接的谓词。
?每个谓词将组特性(如 AVG(SALARY))与下列之一进行比较该组的另一个特性 例如: HAVING AVG(SALARY) > 2 * MIN(SALARY) 常数
?
例如:?HAVING AVG(SALARY) > 20000?
?例如,下列查询寻找雇员数超过 4 的部门的最高和最低薪水:
?

复制代码代码示例: ?SELECT WORKDEPT,MAX(SALARY)AS MAXIMUM,MIN(SALARY) AS MINIMUM
FROM EMPLOYEE?
GROUP BY WORKDEPT?
HAVING COUNT(*) > 4 ORDER BY WORKDEPT

结果:
?

WORKDEPT MAXIMUM MINIMUM?
???? -------- ----------- -----------?
??????? D11 32250.00 18270.00
??????? D21 36170.00 17250.00
??????? E11 29750.00 15340.00?
?

有可能(虽然很少见)查询有 HAVING 子句但没有 GROUP BY 子句。在此情况下,DB2 将整个表看作一个组。因为该表被看作是单个组,所以最多可以有一个结果行。如果 HAVING 条件对整个表为真,则返回选择的结果(该结果必须整个由列函数组成);否则不返回任何行。 官方讲是按组操作,或者好理解点就是按类操作.

通过如下的例子,加深你的理解。

表如下:?
?

复制代码代码示例: ?? ID???? 名称????? 仓库???? 数量?????
?? 01???? 西瓜???? 一号??????? 10?
?? 02????? 西瓜???? 二号?????? 30
?? 03????? 大米????? 一号????? 30?
?? 04???? 苹果????? 一号??????? 40?
?? 05?????? 苹果???? 二号?????? 45?
??? 06????? 苹果????? 三号?????? 5

语句:

复制代码代码示例: Select name,Sun(price) From 表 Group By name?
?

将返回各种商品的总数量,而不管是哪个仓库的..?
结果:?
?

西瓜,40? ? 大米,30? ? 苹果,90

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读