sql中group by 是什么意思啊?请教谢谢

如题所述

一般是从来对一些集合函数进行分组的。
例如
select count(UserId),UserClass from USERINFO group by userClass
这个语句就可以得到每个班级的人数
温馨提示:内容为网友见解,仅供参考
第1个回答  2020-01-04
group
by
语句用于结合合计函数,根据一个或多个列对结果集进行分组。
举几个简单例子
成绩表(姓名,课程,成绩)
1、去重复,同distinct、查找有多少个人的记录(按姓名分组、排重)
2、取每个人有多少条记录(按姓名分组、统计)
3、取有成绩记录为2条的人(按姓名分组、配合having使用)
4、取每个人的总成绩(按姓名分组、合计)
5、取每个人的最高成绩(按姓名分组、取最大max/最小min/平均avg值)
第2个回答  2019-05-31
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
条件对整个表为真,则返回选择的结果(该结果必须整个由列函数组成);否则不返回任何行。
相似回答