文章目录
分组统计
关于多行函数,上面所举例子均是直接对整个表进行数据统计。已知在 city 这个表中,有 4079 条记录,在这些记录中,有多个城市属于同一个国家。如果想统计 city 表中各个国家的人口总数该怎么办?
分析:countrycode 码相同的城市即属于同一个国家,我们以国家为单位进行分组进行人数统计。 分组同样使用 group by 来完成,其 SQL 语句如下:
MariaDB [world]> select countrycode,sum(population) from city group by countrycode;
+-------------+-----------------+
| countrycode | sum(population) |
+-------------+-----------------+
| ABW | 29034 |
| AFG | 2332100 |
| AGO | 2561600 |
| AIA | 1556 |
| ...... | ...... |
| ZAF | 15196370 |
| ZMB | 2473500 |
| ZWE | 2730420 |
+-------------+-----------------+
232 rows in set (0.01 sec)
结果解析:每个国家都会有一个统计结果,总共有 232 个国家。 使用 group by 进行分组时要注意:
- group by 一般和多行函数一起使用;
- 使用分组统计时,select 子句后要么是多行函数,要么是 group by 子句中用于分组的字段;换句话说,分组后,只能查询组的值或组的统计值;
- 对 group by 的结果进行筛选,使用 having 关键字。 例如,只显示国家人口数超过 90000000 的记录,其 SQL 语句修改如下:
MariaDB [world]> select countrycode,sum(population) from city group by countrycode having sum(population) > 90000000;
+-------------+-----------------+
| countrycode | sum(population) |
+-------------+-----------------+
| CHN | 175953614 |
| IND | 123298526 |
+-------------+-----------------+
2 rows in set (0.004 sec)