MySQL中使用GROUP BY对数据进行分组,GROUP BY从字面意义上理解就是根据'BY'指定的规则对数据进行分组,所谓分组就是将一个'数据集'划分成若干个'子区域',然后针对若干个'小区域'进行数据处理。基本语法形式为:
[GROUP BY 字段][HAVING <条件表达式>]
字段值为进行分组时所依据的列名称,“HAVING <条件表达式>”指定满足表达式限定条件的结果将被显示。
1. 创建分组
GROUP BY关键字通常和集合函数一起使用,例如:MAX()、MIN()、COUNT()、SUM()、AVG()。即把数据分为多个逻辑组,并对每个组进行集合计算。
#按照s_id排序并对数据分组,Total为计算字段(用COUNT()函数建立)
SELECT s_id,COUNT(*) as Total
FROM fruits
GROUP BY s_id;
2. 使用HAVING 过滤分组
WHERE 子句过滤行,在数据分组前过滤;HAVING 子句过滤分组,在数据分组后过滤。WHERE排除的行不包括在分组里,且HAVING支持所有WHERE操作符。
#显示水果种类大于1的分组信息
SELECT s_id,GROUP_CONCAT(f_name) as Names
FROM fruits
GROUP BY s_id HAVING COUNT(f_name)>1;
3. 多字段分组
使用GROUP BY可以对多个字段进行分组,根据多字段的值来进行层次分组,分组从左到右。
SELECT *
FROM fruits
GROUP BY s_id,f_name;
注意事项:
- SELECT 语句指定的字段要么就要包含在GROUP BY语句后面,作为分组的依据;要么就要包含在聚合函数中。