Group By All [expressions] :

 Group By All [expressions] :
Group By All + 分组字段, 这个和Group By [Expressions]的形式多了一个关键字ALL。这个关键字只有在使用了where语句且where条件筛选掉了一些组的情况下才可以看出效果。在SQL Server 2000的联机帮助中,对于Group By All是这样进行描述的:
如果使用 ALL 关键字,那么查询结果将包括由 GROUP BY 子句产生的所有组,即使某些组没有符合搜索条件的行。没有 ALL 关键字,包含 GROUP BY 子句的 SELECT 语句将不显示没有符合条件的行的组。
其中有这么一句话“如果使用ALL关键字,那么查询结果将包含由Group By子句产生的所有组...没有ALL关键字,那么不显示不符合条件的行组。”这句话听起来好像挺耳熟的,对了,好像和LEFT JOIN 和 RIGHT JOIN 有点像。其实这里是类比LEFT JOIN来进行理解的。还是基于如下这样一个数据集:
FruitName
ProductPlace
Price
Apple
China
$1.1
Apple
Japan
$2.1
Apple
USA
$2.5
Orange
China
$0.8
Banana
China
$3.1
Peach
USA
$3.0
首先我们不使用带ALL关键字的Group By语句:
1
2
3
4
5
6
7
SELECTCOUNT(*) AS 水果种类,ProductPlaceAS出产国
 
FROMT_TEST_FRUITINFO
 
WHERE (ProductPlace<> 'Japan' )
 
GROUPBYProductPlace
那么在最后结果中由于Japan不符合where语句,所以分组结果中将不会出现Japan。
如今我们加入ALL关键字:
1
2
3
4
SELECTCOUNT(*) AS 水果种类,ProductPlaceAS出产国
FROMT_TEST_FRUITINFO
WHERE (ProductPlace<> 'Japan' )
GROUPBYALLProductPlace
重新运行后,我们可以看到Japan的分组,但是对应的“水果种类”不会进行真正的统计,聚合函数会根据返回值的类型用 默认值0或者NULL来代替聚合函数的返回值。

你可能感兴趣的:(by,group,all)