【工作记录】mysql中实现分组统计的三种方式

这篇具有很好参考价值的文章主要介绍了【工作记录】mysql中实现分组统计的三种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

实际工作中对范围分组统计的需求还是相对普遍的,本文记录下在mysql中通过函数和sql完成分组统计的实现过程。

数据及期望

比如我们获取到了豆瓣电影top250,现在想知道各个分数段的电影总数.

表数据如下:

【工作记录】mysql中实现分组统计的三种方式,工作记录,随笔,mysql
期望结果:
【工作记录】mysql中实现分组统计的三种方式,工作记录,随笔,mysql

实现方案

主要思路是根据score的范围设置别名,然后按照别名统计即可。

方案一:
select tmp.level, count(1) as cnt from
    (select
        score,
        case
            when score >= 7 and score < 8 then '[7,8)'
            when score >= 8 and score < 8.5 then '[8,8.5)'
            when score >= 8.5 and score < 9 then '[8.5,9)'
            when score >= 9 and score < 9.5 then '[9,9.5)'
            when score >= 9.5 and score < 10 then '[9.5,10)'
        end as level
    from `douban_movie_top250` limit 20 ) tmp
group by tmp.level
order by tmp.level asc
方案二:
select
    case tmp.level
        when 1 then '[7,8)'
        when 2 then '[8,8.5)'
        when 3 then '[8.5,9)'
        when 4 then '[9,9.5)'
        when 5 then '[9.5,10)'
    end as level, count(1) as cnt
from
	(select score, interval(score, 7, 8, 8.5, 9, 9.5) as level from `douban_movie_top250` limit 20) tmp
group by tmp.level
order by tmp.level asc

INTERVAL()函数介绍

INTERVAL()函数可以返回分段后的结果,语法如下:

​ INTERVAL(N,N1,N2,N3,…)

其中,N是要判断的数值,N1,N2,N3,…是分段的间隔。

sql中用到了interval函数,interval(score, 7, 8, 8.5, 9, 9.5)返回的是score所处阶段的索引,比如返回1代表score在[7,8)范围内,前闭后开,依次类推。

分数段 对应值
[7,8) 1
[8,8.5) 2
[8.5,9) 3
[9,9.5) 4
[9.5,10) 5

我们直接查询下这个函数使用的结果验证下:

select score, interval(score, 7, 8, 8.5, 9, 9.5) as level 
from `douban_movie_top250` limit 20

结果如下:
【工作记录】mysql中实现分组统计的三种方式,工作记录,随笔,mysql
可以看到验证结果是正确的,依据这个特性还是可以做不少事情的。

方案三:
select level, count(1) as cnt from (
	select score, elt(interval(score, 7, 8, 8.5, 9, 9.5), '[7,8)','[8,8.5)', '[8.5,9)', '[9,9.5)','[9.5,10)') as level
	from `douban_movie_top250` limit 20) tmp
group by tmp.level order by tmp.level asc;

这个sql中用到了elt函数和interval函数,大致可以猜测到elt函数做的事情就是上面方案二中case…when…做的事情。

ELT函数简介

​ ELT()函数是分值函数,功能有点类似很多编程语言中的switch关键字。

语法:

​ ELT(N,str1,str2,str3,…)

其中N是要判断的数值,如果N=1,则返回str1,如果N=2,则返回str2,以此类推。

总结

本文针对分组统计提出了三种实现方式,各有优劣吧。

针对以上内容有任何疑问或者建议欢迎留言评论~

创作不易,欢迎一键三连~~~文章来源地址https://www.toymoban.com/news/detail-640770.html

到了这里,关于【工作记录】mysql中实现分组统计的三种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【大数据系列之MySQL】(七):MySQL查看版本号的三种方式

    第一种方式就是通过命令行,输入指令: 方式二和方式一是同样的道理,只不过可以将命令进行简写: 第三种方式是通过登录MySQL的服务端,通过指令:

    2024年04月15日
    浏览(47)
  • mysql中的实现字段或字符串拼接的三种方式

    concat函数是将多个字段或字符串拼接为一个字符串;但是字符串之间没有任何分隔。 concat函数官方介绍 执行结果如下: 执行结果如下: 如果拼接的字段中有一个为null,则结果为null。 执行结果如下: concat_ws函数将多个字段或字符串拼接为一个字符串,且字符串直接可以指定

    2024年02月22日
    浏览(89)
  • mysql查询结果命令行方式导出/输出/写入到文件的三种方法

    直接执行命令: 在目录/tmp/下会产生文件test.xls 遇到的问题: 可能原因:mysql没有向/data/下写的权限 查询都自动写入文件: 跳出mysql命令行

    2024年02月11日
    浏览(42)
  • mysql插入重复数据的三种处理方式(DUPLICATE、IGNORE、REPLACE )

    “ INSERT   ...  ON  DUPLICATE   KEY  UPDATE   ”, 它是在插入操作时, 如果数据出现重复,则更新重复数据的值 。   示例: INSERT INTO myf_deal_data ( `ID`, `PTNAME`, `PTDATA`, `OPERTIME`, `REPORTTIME` ) VALUES     ( 111, \\\'858_Ua\\\', \\\'219.1000\\\', \\\'2022-04-01 00:45:00\\\', \\\'2022-06-28 10:04:52\\\' )  ON DUPLICATE KEY UPDATE PT

    2024年02月10日
    浏览(54)
  • React 中实现组合键操作的三种方法

    在 React 中实现组合键可以使用以下方式: 使用 KeyboardEvent.getModifierState() 方法 : 使用 Mousetrap 库 : 使用 ref 和原生事件处理 :

    2024年04月13日
    浏览(34)
  • 程序设计的三种结构-C中实现其的6条语句

    C语言设计出来就是为了解决现实中存在的问题,但是现实中问题大多较为复杂,如何描述问题也成为了一个重要的问题。将这些众多的问题核心找出来,我们发现只需要使用三种基本的结构包括:顺序结构,分支结构,循环结构就可以描述那些简单的问题,至于更为复杂的。

    2024年02月06日
    浏览(46)
  • 安卓在子线程中实现更新UI界面的三种方法 Handler+Message、runOnUiThread、控件.post()

    1.说明 安卓中UI线程为主线程,更新UI界面必须在主线程中进行,在子线程中实现更新UI界面的三种方法:Handler、RunOnUiThread、控件.post() 2.1 Handler (1)定义handler (2)使用 2.2 控件.post() 2.3 在子线程中使用 runOnUiThread

    2024年02月12日
    浏览(44)
  • MySQL时间分组:按小时统计数据(mysql按小时分组)

    MySQL时间分组是一类涉及MySQL数据库的SQL语句,能够以小时对数据进行分组统计。 比如,如果你想根据一定的时间间隔,把MySQL数据库中的记录分成几组,那么MySQL时间分组技术就派上用场了。 MySQL时间分组主要使用MySQL语句YEAR(), WEEK(), HOUR()和GROUP BY来实现,按小时统计数据实

    2024年02月12日
    浏览(53)
  • 线程创建的三种方式

    目录 1. Thread类 2. Runnable接口 3. Callable接口 4. 线程的生命周期 新建  就绪 运行 阻塞 等待 结束 继承Thread类的方式创建线程 定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务 创建Thread类的子类,即创建了线程对象 调用线程对象的

    2024年02月09日
    浏览(42)
  • Servlet的三种映射方式

    Servlet支持三种映射方式,以达到灵活配置的目的。 首先先创建Servlet(创建方式略),然后再web.xml中就行配置。 配置方式:         (1)、 指名道姓的方式         注:此种方式,只有和映射配置一模一样时,Servlet才会接收和响应来自客户端的请求。 示例:         (

    2024年02月06日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包