数据分组用来将数据分为多个逻辑组,从而可以对每个组进行聚合运算。
SQL语句中使用GROUP BY子句进行分组,使用方式为“GROUP BY 分组字段”。分组语句一般和聚合函数一起使用,GROUP BY子句负责将数据分成逻辑组,而聚合函数则对每个组进行统计计算。
需要分组的所有列都必须位于GROUP BY子句的列名列表中,没有出现在GROUP BY子句中的列是不能放到SELECT语句后的列名列表中的(聚合函数除外)。
比如下面的SQL语句是错误的:
SELECT 销售地区,销售金额 FROM demo_salesday GROUP BY 销售地区;
而下面的SQL语句是正确的:
SELECT 销售地区,AVG(销售金额) FROM demo_salesday GROUP BY 销售地区;
执行完毕后我们能看到下面的结果:
+----------+---------------+
| 销售地区 | AVG(销售金额) |
+----------+---------------+
| 东北 | 304.142500000 |
| 华东 | 297.203684210 |
| 华中 | 320.510000000 |
| 华北 | 287.794531250 |
| 华南 | 292.066271186 |
| 西北 | 329.240000000 |
| 西南 | 323.786000000 |
+----------+---------------+
GROUP BY子句中可以指定多个列,只需要将多个列的列名用逗号隔开即可。指定多个分组规则以后,数据库系统将按照定义的分组顺序对数据进行逐层分组。首先按照第一个分组列进行分组,然后在每个小组内按照第二个分组列进行再次分组……逐层分组,从而实现“组中组”的效果,而查询的结果集是以最末一级分组来进行输出的。比如下面的SQL语句将会列出所有销售地区及城市的情况:
SELECT 销售地区,销售城市 FROM demo_salesday GROUP BY 销售地区,销售城市;
执行完毕我们就能看到下面的结果:
+----------+----------+
| 销售地区 | 销售城市 |
+----------+----------+
| 东北 | 吉林 |
| 东北 | 辽宁 |
| 华东 | 上海 |
| 华东 | 山东 |
| 华中 | 河南 |
| 华北 | 北京 |
| 华北 | 天津 |
| 华北 | 河北 |
| 华南 | 广州 |
| 华南 | 海南 |
| 西北 | 陕西 |
| 西南 | 重庆 |
+----------+----------+