【SQL杂谈】区间分组统计

本文介绍了如何使用SQL进行区间分组统计,包括基础的分组统计,通过sum和if解决区间统计,以及利用interval和elt函数以及case语句进行更复杂的区间处理。通过案例展示了在遇到统计不同产能区间煤矿数量等问题时的多种解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

很多时候,我们都使用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;

这样做的结果,只是按数值进行分组统计。
那么,该怎么办呢?

需求2:区间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值