使用 GROUP BY 分组行 [SQL Server]

本文详细介绍了 SQL 中 GroupBy 子句的用法及其语法格式,通过具体实例展示了如何利用 GroupBy 对数据进行分组及汇总计算,同时指出了使用过程中的一些限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Group By 子句用于对结果集进行分组,并对每一组数据进行汇总计算。

语法格式:

Group By  [列名]  [HAVING  条件表达式]

Group By按“列名”指定的列进行分组,将该列列值相同的记录组成一组,并对每一组进行汇总计算。每一组生成一条记录。若有“HAVING  条件表达式”,则表示对生成的组进行筛选。

 

假如,TableX 表包含

--------------------------------

ColumnA  ColumnB  ColumnC


1      abc       5

1      def      4

1      ghi      9

2      jkl       8

2      mno      3


如果 ColumnA 是组合列,则结果集中最终将有两行,其中一行汇总值 1 的信息,而另一行汇总值 2 的信息。

如果 ColumnA 是组合列,要引用 ColumnBColumnC,这两列必须是能为 ColumnA 中的每个值返回单个值的聚合函数中的参数。选择列表中可以包含诸如 MAX (ColumnB)、SUM (ColumnC) 或 AVG (ColumnC) 之类的表达式:

SELECT ColumnA,
MAX(ColumnB) AS MaxB,
SUM(ColumnC) AS SumC
FROM TableX
GROUP BY ColumnA

此选择语句返回两行,为 ColumnA 中的每个唯一值各返回一行:

ColumnA     MaxB     SumC        
----------- ---- ----------- 
1                ghi           18          
2                mno          11          
(2 row(s) affected)

但是,选择列表中不能只包含 ColumnB 表达式:

SELECT
ColumnA,
ColumnB,
SUM(ColumnC) AS SumC
FROM TableX
GROUP BY ColumnA

  由于 GROUP BY 只能返回一行,该行在 ColumnA 中的值为 1,因此无法返回与 ColumnA 中的值 1 关联的 ColumnB 中的三个值(abc、def 和 ghi)。

不能对 ntexttextimagebit 列使用 GROUP BY 或 HAVING,除非它们所在的函数返回的值属于其他数据类型。这样的函数包括 SUBSTRING 和 CAST。


转载于:https://www.cnblogs.com/Ryan_j/archive/2010/10/19/1855708.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值