每天学点SQL(007) GROUP BY 子句

视频加载中...

视频约90秒。碎片时间,关注收藏。


GROUP BY

GROUP BY 语句经常与聚合函数一起使用,根据一个或多个列对结果集进行分组。

GROUP BY 语法

<code>SELECT 列名1,聚合函数(列名2)
FROM 表名
GROUP BY 列名1/<code>

在 SELECT 子句中包含聚合函数不是强制性的。如果使用聚合函数,它将计算每个组的汇总值。

如果要在分组之前过滤行,需使用 WHERE子 句;如果要过滤组,请使用 HAVING 子句。

换句话说,WHERE 子句应用于行,而 HAVING 子句应用于分组。

GROUP BY 子句中出现的列为分组列。如果分组列中包含 NULL 值,则所有的 NULL 值都汇总到一个分组中,因为GROUP BY子句认为NULL值相等

另外,要对组进行排序,需要在 GROUP BY 子句之后添加 ORDER BY 子句。

GROUP BY 使用示例

假设表名students包含以下几个字段:

每天学点SQL(007) GROUP BY 子句

其中,各字段定义为:sid为学生ID、name为姓名、gender为性别,age为年龄,province为所在省份,city为所在城市,district为所在区 (NULL表示未上报)。

GROUP BY与聚合函数配合使用

<code>SELECT gender, COUNT(sid) AS s_cnt 
FROM students 
GROUP BY gender/<code>

该语句查询男女生分别有多少人。关于聚合函数可参考聚合函数的使用

每天学点SQL(007) GROUP BY 子句

GROUP BY 与 ORDER BY 配合使用

<code>SELECT age, COUNT(sid) AS s_cnt 
FROM students 
GROUP BY age
ORDER BY age DESC/<code>

该语句查询各年龄组分别有多少学生,同时结果集按年龄组降序排列。关于聚合函数可参考排序函数的使用

每天学点SQL(007) GROUP BY 子句

GROUP BY 与 HAVING 配合使用

<code>SELECT province, COUNT(sid) AS s_cnt 
FROM students 
GROUP BY province
HAVING s_cnt >= 2
ORDER BY s_cnt /<code>

该语句查询学生人数至少为2人的省份,同时按学生人数升序排列。

每天学点SQL(007) GROUP BY 子句

GROUP BY 按多列进行分组

<code>SELECT gender, age, COUNT(sid) AS s_cnt 
FROM students 
GROUP BY gender, age
ORDER BY gender, age/<code>

该语句分别计算男女生中各年龄组的人数,并按性别组和年龄组升序排列。

每天学点SQL(007) GROUP BY 子句


碎片时间,关注收藏。

每天学点SQL(007) GROUP BY 子句


往期视频:

每天学点SQL(001) SELECT语句

每天学点SQL(002) DISTINCT语句

每天学点SQL(003) WHERE子句

每天学点SQL(004) AND 或 OR

每天学点SQL(005) ORDER BY语句

每天学点SQL(006) 聚合函数


分享到:


相關文章: