一、在SQL中Group By从字面的意思上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个‘数据集’划分成若干个‘小区域’,然后针对若干个‘小区域’进行数据处理。在此语法中group by子句为列中每一值组合生成一组。
例如:对成绩表(sc)中的学号(sno)进行分组

SELECT sno
FROM sc
GROUP BY sno

注意:使用GROUP BY 语法是分组,不是去重。需要去重的请使用DISTINCT,以下是去重的语法:

SELECT DISTINCT sno
FROM sc

二、sql server里分组查询通常用于配合聚合函数,达到分类汇总统计的信息。 而其分类汇总的本质实际上就是先将信息排序,排序后相同类别的信息会聚在一起,然后通过需求进行统计计算。常用函数有:COUNT()总数量总行数、SUM()总数总和、AVG()平均值、MIN()最小值、MAX()最大值。
例如:对成绩表(sc)中的每一个学号(sno)进行统计总分

SELECT sno,SUM(score)
FROM sc
GROUP BY sno

注意:在查询有多少个列的时候,就要在GROUP BY 中引用多少个列,比如:查询sno,score,那么在GROUP BY 中就有 sno,score

三、HAVING与 GROUP BY 配合使用,为聚合函数操作指定条件,以根据指定的条件列表过滤分组。而WHERE 子句中只能指定行的条件,而不能指定组的条件,因此就有了 HAVING 子句,它用来指定组的条件。
例如:对成绩表(sc)中的每一个学号(sno)进行统计总分,并且总分要大于200分以上的。

SELECT sno,SUM(score)
FROM sc
GROUP BY sno
HAVING SUM(score) >200
ORDER BY SUM(score)

注意:WHERE子句筛选是要在 GROUP BY 之前进行筛选的,而且WHERE子句不能引用聚合函数进行操作,否则会出错的。使用HAVING进行筛选,一定要在GROUP BY 之后。若要使用ORDER BY进行排序的话,必须要在HAVING 的之后,否则会出错。

更多推荐

SQL的分组查询