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。