我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Mysql区间分组查询的实现方式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Mysql区间分组查询的实现方式

Mysql区间分组查询

场景

一张用户表(user),有用户id(id)、余额(balance)等字段,要求展示 余额在某个区间内的人数

​ 区间有0-1万,1-10万,10-50万,50-100万,100万+,

下面是模拟数据:

用户id        余额
1            100    
2            200    
3            3223
4            100001
5            100025
6            512123
7            565656
8            10000001

统计结果应该如下所示:

余额          人数
0-1万        1
1-10万        2
10-50万        1
50-100万    2
100万+        1

第一想法

select 
    count(if(balance between 0 and 10000, id , null ) ) as "0-1万",
    count(if(balance between 10001 and 100000, id , null ) ) as "1-10万",
    count(if(balance between 100001 and 500000, id , null ) ) as "10-50万",
    count(if(balance between 500001 and 1000000, id , null ) ) as "50-100万",
    count(if(balance > 1000000, id , null ) ) as "100万+"
from user ;

这样可以查出来每个范围对应的人数,但是不尽人意,而且写的很麻烦…

一番百度之后

select interval(balance,0,10000,100000,500000,1000000) as i ,count(*) 
from user group by i;

select elt(interval(balance,0,10000,100000,500000,1000000),"0-1万","1-10万","10-50万","50-100万","100万+") as region ,count(*) 
from user group by region;

利用了mysql提供的interval和elt函数实现了效果

interval

interval(N,N1,N2,N3) ,比较列表中的N值,该函数如果N<N1返回0,如果N<N2返回1,如果N<N3返回2 等等。

elt

elt(n,str1,str2,str3,…) 如果n=1,则返回str1,如果n=2,则返回str2,依次类推

两个函数结合,再加上group,实现了这种范围分组的效果

另一种解决办法

由于使用的是类似mysql语句查询的一个分析数据库,它不支持elt函数和interval函数(抄mysql没有抄全…)

实现这种范围分组的场景,可以通过创建中间表的形式实现。然后通过用户表去join

创建如下一个中间表:有下限、上限和区间名三个字段

lower        upper        region
0            10000        0-1万
10001        100000        1-10万
100001        500000        10-50万
500001        1000000        50-100万
1000000        2000000000    100万+

用户表就可以通过余额字段去join这个表

select region,count(*)
from user 
left join tmp on user.balance between tmp.lower and tmp.upper
group by region 

就可以实现范围分组的效果

相比之前两种,感觉这个想法很有趣(同事教的)。

按区间分组查询、获取各区间的总数

数据表如下

需求

tick_count是次数、user_account是用户标识,user_account可能重复,统计0次,1-3次、4-6次、7-9次、10-12次、13次以上,这几个区间各有多少个用户数

select case
         when tc.stick_count = 0 then
          '0'
         when tc.stick_count > 0 and tc.stick_count <= 3 then
          '1to3'
         when tc.stick_count > 3 and tc.stick_count<= 6 then
          '4to6'
         when tc.stick_count > 6 and tc.stick_count <= 9 then
          '7to9'
	     when tc.stick_count > 9 and tc.stick_count <= 12 then
          '10to12'
	     when tc.stick_count >  13 then
          'more13'
       end stickLevel,
       COUNT(DISTINCT user_account) total
  from t_stick_detail_hourly tc 
 group by case
         when tc.stick_count = 0 then
          '0'
         when tc.stick_count > 0 and tc.stick_count <= 3 then
          '1to3'
         when tc.stick_count > 3 and tc.stick_count<= 6 then
          '4to6'
         when tc.stick_count > 6 and tc.stick_count <= 9 then
          '7to9'
		 when tc.stick_count > 9 and tc.stick_count <= 12 then
          '10to12'
	     when tc.stick_count > 13 then
          'more13'
       end

运行结果

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Mysql区间分组查询的实现方式

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Mysql区间分组查询的实现方式

这篇文章主要介绍了Mysql区间分组查询的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

MySQL 分组查询的优化方法

MySQL 在处理 GROUP BY 和 DISTINCT 查询的方式在大多数情况下类似,事实上,在优化过程中有时候会把在这两种方式中转换。两类查询都能够从索引中受益,通常,这也是优化这两种查询最为重要的方式。在无法使用索引时,MySQL
2022-05-20

Mysql四种分区方式及组合分区落地怎么实现

这篇文章主要介绍“Mysql四种分区方式及组合分区落地怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Mysql四种分区方式及组合分区落地怎么实现”文章能帮助大家解决问题。一、问题1.分区是什
2023-06-30

mysql 表分区的方式和实现

1. mysql 表的分区方式 MySQL 提供了多种分区方式,以下是常见的几种分区方式: 范围分区(RANGE):按照某个连续的范围将数据分区,例如按照订单日期进行分区。在创建表时,可以使用 PARTITION BY RANGE 子句来设
2023-08-17

sqlServer实现分页查询的三种方式

目录一、offset /fetch next关键字二、利用max(主键)三、利用row_number关键字总结sqlServer的分页查询和mysql语句不一样,有三种实现方式。分别是:offset /fetch next、利用max(主键
2023-03-02

MySQL连表查询分组去重的实现示例

目录业务逻辑数据表结构查询逻辑SQL脚本脚本说明业务逻辑通过多种渠道将小程序的活动页链接发布出去,比如通过多多种短信附带链接( channel 就记为 sms1,sms2,sms3 ),或者海报上面贴微信小程序的二维码( channel 记
2022-05-24

MySQL分组查询的方法是什么

MySQL中使用GROUP BY子句来实现分组查询。通过在SELECT语句中添加GROUP BY子句并指定需要分组的列,可以将结果集按照指定列的值进行分组,然后对每个分组进行聚合操作,如COUNT、SUM、AVG等。例如,以下是一个简单的
MySQL分组查询的方法是什么
2024-04-20

Mysql分组查询每组最新一条数据的三种实现方法

目录前言注意事项准备SQL错误原因方法一方法二(适用于自增ID和创建时间排序一致)方法三(适用于自增ID和创建时间排序一致)总结MAX()函数和MIN()这一类函数和GROUP BY配合使用存在问题前言在写报表功能时遇到一个需要根据用户i
2023-01-12

编程热搜

目录