1、GROUP BY columns1
字面上理解为对制定的’数据集‘按照columns1进行分组,分成一个个’小区域‘,然后对这些’小区域‘进行处理。
2、原始表aa
3、简单 group by
示例 1
SELECT 类别, SUM(数量) AS ab
FROM aa
GROUP BY 类别
结果按照’类别‘进行分类汇总。
4、group by 和 order by
示例 2
SELECT 类别, SUM(数量) AS ab
FROM aa
GROUP BY 类别
ORDER BY ab DESC
结果:
5、group by 与select 中字段的限制
示例 3
SELECT 类别, SUM(数量) AS ab,摘要
FROM aa
GROUP BY 类别
ORDER BY ab DESC
结果
如果SQL语句带group by 则select 后面的字段,要么包含在group by后面作为分组依据,要么被包含在聚合函数中。
6、group by columns1, columns2
示例 4
SELECT 类别,摘要 ,SUM(数量) AS ab
FROM aa
GROUP BY 类别,摘要
ORDER BY 类别
结果
如果 (类别+摘要) 都一样则合并为一组,如果有任何一个不一样,则分到不同组。
7、 group by 与聚合函数
局和函数
示例 5 AVG函数,求各组平均值
SELECT 类别, avg(数量) AS 平均值
FROM aa
GROUP BY 类别;
结果
所以,平均值AVG是先按分组进行SUM,然后除以每个分组中的记录个数。
示例6 COUNT(*)统计每个分组的记录个数
select 类别, count(*) AS 记录数 from aa group by 类别;
结果
count(*) 是用来计算每个分组中记录的个数。
8、 where 和 having 的区别
where的作用是在查询结果分组前,将不符合where条件的记录去掉,即在分组前过滤数据,在where的条件中,不能包含聚合函数。
having 的作用是发生在查询结果分组后,将符合条件的分组筛选出来,having的条件中经常包含聚合函数。
示例 7
select 类别, SUM(数量)from aa
where 数量 > 8
group by 类别
having SUM(数量) > 10
结果
示例 8
select 类别, SUM(数量)from aa
where 数量 > 8
group by 类别
having SUM(数量) > 10
AND
SUM(数量) < 17
结果