简介
很多时候,我们都使用group by 进行分组,count(*)进行统计,两者结合可以进行聚合统计。
假设我们有这样一张煤矿数据库表。
table name: coalmine
columns: id(煤矿ID, bigint), prod_status(生产状态,varchar), prod_capacity(产能,decimal)
下面围绕这张表,我们探讨一些常见的需求所需要使用到的SQL。
需求方案
需求1:统计各生产状态的煤矿数量
学过SQL的人一眼就看出来,这是一个非常基础的问题。我们只需要按照prod_status进行分组进行聚合统计即可。大致可以写如下的sql:
select prod_status as name, count(*) as num from coalmine group by name;
可以得到如下的输出:
name | num
停产 377
停建 360
关闭 31
准备 1
在建 89
正在复产 3
生产 463
生产/在建 15
生产/试运转 12
试运转 1
非常完美,我们得到了我们想要的数据。
但是现在有了新的需求:统计产能在30以下,30~90,90以上的煤矿数量有多少。现在我们遇到了难题,因为产能字段(prod_capacity)是一个数值,同时统计的依据是一个区间,我们不能单纯的将其作为group by的对象进行操作。
select prod_capacity as name, count(*) as num from coalmine group by name;
这样做的结果,只是按数值进行分组统计。
那么,该怎么办呢?