如何理解“Group By 字段1,字段2,字段3”,最好给个例子,谢谢

hyxhyxhyxhyx 2004-12-21 10:33:46
谢谢
...全文
1616 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
phylory 2004-12-21
  • 打赏
  • 举报
回复
使用 GROUP BY 一般是为了使用聚合函数
GROUP BY a,b,c
说明只要 a,b,c 一样的就可以归为一组,聚合函数是对归为一组的数据进行操作的
comszsoft 2004-12-21
  • 打赏
  • 举报
回复
Group By f1,f2,f3
按 f1,f2,f3 进行分组,三个字段中只要有一个不一样,就是一个记录
NinGoo 2004-12-21
  • 打赏
  • 举报
回复
GROUP BY 子句
指定用来放置输出行的组,并且如果 SELECT 子句 <select list> 中包含聚合函数,则计算每组的汇总值。指定 GROUP BY 时,选择列表中任一非聚合表达式内的所有列都应包含在 GROUP BY 列表中,或者 GROUP BY 表达式必须与选择列表表达式完全匹配。



说明 如果未指定 ORDER BY 子句,则使用 GROUP BY 子句返回的组没有任何特定的顺序。建议始终使用 ORDER BY 子句指定特定的数据顺序。


语法
[ GROUP BY [ ALL ] group_by_expression [ ,...n ]
[ WITH { CUBE | ROLLUP } ]
]

参数
ALL

包含所有组和结果集,甚至包含那些任何行都不满足 WHERE 子句指定的搜索条件的组和结果集。如果指定了 ALL,将对组中不满足搜索条件的汇总列返回空值。不能用 CUBE 或 ROLLUP 运算符指定 ALL。

如果在访问远程表的查询中还有 WHERE 子句,则该查询不支持 GROUP BY ALL。

group_by_expression

是进行分组所依据的表达式。group_by_expression 也称为分组列。group_by expression 可以是列或引用列的非聚合表达式。在选择列表内定义的列的别名不能用于指定分组列。



说明 text、ntext 和 image 类型的列不能用于 group_by_expression。


对于不包含 CUBE 或 ROLLUP 的 GROUP BY 子句,group_by_expression 的项数受查询所涉及的 GROUP BY 列的大小、聚合列和聚合值的限制。该限制从 8,060 字节的限制开始,对保存中间查询结果所需的中间级工作表有 8,060 字节的限制。如果指定了 CUBE 或 ROLLUP,则最多只能有 10 个分组表达式。

CUBE

指定在结果集内不仅包含由 GROUP BY 提供的行,还包含汇总行。在结果集内返回每个可能的组和子组组合的 GROUP BY 汇总行。GROUP BY 汇总行在结果中显示为 NULL,但可用来表示所有值。使用 GROUPING 函数确定结果集内的空值是否是 GROUP BY 汇总值。

结果集内的汇总行数取决于 GROUP BY 子句内包含的列数。GROUP BY 子句中的每个操作数(列)绑定在分组 NULL 下,并且分组适用于所有其它操作数(列)。由于 CUBE 返回每个可能的组和子组组合,因此不论指定分组列时所使用的是什么顺序,行数都相同。

ROLLUP

指定在结果集内不仅包含由 GROUP BY 提供的行,还包含汇总行。按层次结构顺序,从组内的最低级别到最高级别汇总组。组的层次结构取决于指定分组列时所使用的顺序。更改分组列的顺序会影响在结果集内生成的行数。



重要 使用 CUBE 或 ROLLUP 时,不支持区分聚合,如 AVG(DISTINCT column_name)、COUNT(DISTINCT column_name) 和 SUM (DISTINCT column_name)。如果使用这类聚合,SQL Server 将返回错误信息并取消查询。


HAVING 子句
指定组或聚合的搜索条件。HAVING 通常与 GROUP BY 子句一起使用。如果不使用 GROUP BY 子句,HAVING 的行为与 WHERE 子句一样。

语法
[ HAVING < search_condition > ]

参数
< search_condition >

指定组或聚合应满足的搜索条件。当 HAVING 与 GROUP BY ALL 一起使用时,HAVING 子句替代 ALL。有关更多信息,请参见搜索条件。

text、image 和 ntext 数据类型不能用于 HAVING 子句。



说明 在 SELECT 语句中使用 HAVING 子句不影响 CUBE 运算符分组结果集和返回汇总聚合行的方式。

NinGoo 2004-12-21
  • 打赏
  • 举报
回复
使用 GROUP BY 分组多行
GROUP BY 子句用来为结果集中的每一行产生聚合值。如果聚合函数没有使用 GROUP BY 子句,则只为 SELECT 语句报告一个聚合值。

以下示例返回分类 2 中每种产品已销售的单位数量:

USE Northwind
SELECT OrdD.ProductID AS ProdID,
SUM(OrdD.Quantity) AS AmountSold
FROM [Order Details] AS OrdD JOIN Products as Prd
ON OrdD.ProductID = Prd.ProductID
AND Prd.CategoryID = 2
GROUP BY OrdD.ProductID

下面是结果集:

ProdID AmountSold
----------- -----------
3 328
4 453
5 298
6 301
8 372
15 122
44 601
61 603
63 445
65 745
66 239
77 791

(12 row(s) affected)

GROUP BY 关键字后面跟着列的列表,称为分组列。GROUP BY 子句限制结果集中的行;对于分组列中的每个非重复值只有一行。每个结果集行都包含与其分组列中特定值相关的汇总数据。

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧