MySQL 分组统计

文章目录


分组统计

在这里插入图片描述

关于多行函数,上面所举例子均是直接对整个表进行数据统计。已知在 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)

猜你喜欢

转载自blog.csdn.net/m0_62617719/article/details/130843310
今日推荐