mysql大屏统计

embedded/2024/10/23 10:37:20/

我们在做大屏项目的时候,会用到很多统计的功能,最常见的功能就是统计数量,比如有一个注册功能,要统计有多少条记录通过审核,多少条记录没通过审核,审核通过率是多少等等,最常用的统计sql语句如下,使用count(*)来统计,这种方式优点是简单,缺点是没法一次性统计出所有数据,性能比较差

sql">select count(*) as totalNum from external_user_register where check_status = 1

优化型sql

这种sql可以一次性统计出你想要的数据,由于只要执行一次,效率也比上面那种要好,这条sql的原理是通过sum来统计,比如sum(1)的意思是external_user_rgister有几条数据,就会加几个1,就可以统计出总数量,统计通过数量可以通过case来,如果check_status是1则返回1否则返回0,再通过sum来累加1的数量就可以计算出通过数

sql">select sum(1) as totalNum,sum(case when (check_status = 1) then 1 else 0 end) as passNum,sum(case when (check_status = 2) then 1 else 0 end) as rejectNum
from external_user_register

注意点

使用sum有个缺点就是如果表中一条数据也没回会返回null,不像count(*)即时没数据也会返回0,你可以在代码层面处理,也可以使用ifnull函数,ifnull如果遇到null会返回你指定的值

sql">select ifnull(sum(1),0) as totalNum,ifnull(sum(case when (check_status = 1) then 1 else 0 end),0) as passNum,ifnull(sum(case when (check_status = 2) then 1 else 0 end),0) as rejectNum
from external_user_register

计算通过率

我们使用hutool工具的NumberUtil计算通过率,浮点数计算都使用BigDecimal,避免精度问题,计算前要判断下分母不能为0,我们先用passNum除以totalNum,保留两位小数,再乘以100就是百分比,最后setScale(0)就是不保留小数

if (!externalUserStatis.getTotalNum().equals(0)) {BigDecimal passRatio = NumberUtil.div(externalUserStatis.getPassNum(), externalUserStatis.getTotalNum(), 2, RoundingMode.DOWN).multiply(BigDecimal.valueOf(100)).setScale(0);externalUserStatis.setPassRatio(passRatio);
}


http://www.ppmy.cn/embedded/129795.html

相关文章

解码专业术语——应用系统开发项目中的专业词汇解读

文章目录 引言站点设置管理具体要求包括: Footer管理基于URL的权限控制利用数据连接池优化数据库操作什么是数据连接池?优化的优势 利用反射改造后端代码,AJAX反射的作用及其在后端代码中的应用AJAX 实现前后端无刷新交互 引言 创新实践项目二…

|动漫爬取|001_djangodjango基于Spark的国漫推荐系统的设计与实现2024_tpd6q1o4

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍:CodeMentor毕业设计领航者、全网关注者30W群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AW…

windows安装nvm重启后,命令‘nvm‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

这是由于环境变量的位置可能出现了问题,此时应该去手动更改环境变量的位置 1.点击系统 2.然后点击关于,进入系统高级设置 3.点击环境变量 4.查看这两个东西的安装位置是否正确,如果不正确,点击编辑进行重写,写完记得点…

代码随想录算法训练营Day09 | 151.翻转字符串里的单词、卡码网:55.右旋转字符串、28. 实现 strStr()、459.重复的子字符串

文章目录 151.翻转字符串里的单词思路与重点 卡码网:55.右旋转字符串思路与重点 28. 实现 strStr()思路与重点 459.重复的子字符串思路与重点 字符串总结和双指针总结 151.翻转字符串里的单词 题目链接:151. 反转字符串中的单词 - 力扣(Leet…

Web应用程序的设计与前端开发

我们的客户专门从事自动化系统的开发和支持,用于分析、报告、规划和其他业务任务,以及集成外部产品。 任务 我们的客户开始开发一个用于企业业务分析的web应用程序。他们自己处理后端,而我们的团队负责界面和前端。界面不仅在视觉上具有吸引…

若依框架中根目录与子模块 `pom.xml` 的区别

前言 在使用 Maven 构建的多模块项目中,比如若依(RuoYi)这样的后台管理系统,我们会遇到两种不同作用的 pom.xml 文件:位于项目根目录下的以及每个子模块下的。这两者之间存在一些关键差异,并且理解这些差异…

python学习-第一个小游戏(vscode环境)

学习小甲鱼的视频,写了一个小游戏,vscode环境 运行结果 源码地址: python小游戏-猜数字源码

Android--第一个android程序

写在前边 ※安卓开发工具常用模拟器汇总Android开发者必备工具-常见Android模拟器(MuMu、夜神、蓝叠、逍遥、雷电、Genymotion...)_安卓模拟器-CSDN博客 ※一般游戏模拟器运行速度相对较快,本文选择逍遥模拟器_以下是Android Studio连接模拟器实现(先从以上博文中…