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
是组合列,要引用 ColumnB
或 ColumnC
,这两列必须是能为 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)。
不能对 ntext、text、image 或 bit 列使用 GROUP BY 或 HAVING,除非它们所在的函数返回的值属于其他数据类型。这样的函数包括 SUBSTRING 和 CAST。