数据库的group by有什么意义呢?(sql server)
1个回答

是分组的意思

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

以上SQL将返回各种商品的总数量,而不管是哪个仓库的..

结果:

西瓜,40

大米,30

苹果,90