Java项目查询统计表中各状态数量

框架:SpringBoot,Mybatis;数据库:MySQL

表中设计2个状态字段,每个字段有3种状态,统计这6个状态各自的数量

sql查询语句及结果如图

SQL:

sql 复制代码
SELECT 
SUM(CASE WHEN A=0 THEN 1 ELSE 0 END) AS 'A0', 
SUM(CASE WHEN A=1 THEN 1 ELSE 0 END) AS 'A1', 
SUM(CASE WHEN A=2 THEN 1 ELSE 0 END) AS 'A2',
SUM(CASE WHEN B=0 THEN 1 ELSE 0 END) AS 'B0', 
SUM(CASE WHEN B=1 THEN 1 ELSE 0 END) AS 'B1',  
SUM(CASE WHEN B=2 THEN 1 ELSE 0 END) AS 'B2'   
FROM test

效果达到了,接下来就是在项目中实际使用

以下仅设计为最简单的使用方式,有具体需求按需求增加逻辑

Controller:

java 复制代码
	@GettMapping("/findStatusCount")
    public List<Object> findStatusCount(){
        return statusCountService.findStatusCount();
    }

Service:

java 复制代码
    List<Object> findStatusCount();

Service实现类:

java 复制代码
	@Override
    public List<Object> findStatusCount() {
        return statusCountMapper.selectStatusCount();
    }

Mapper:

java 复制代码
	List<Object> selectStatusCount();

在自定义sql的xml中代码如下。

where中按需求加条件,resultType中使用HashMap时,可能展示时的顺序与查询结果顺序不同,因此使用LinkedHashMap

java 复制代码
	<select id="selectStatusCount" resultType="java.util.LinkedHashMap">
        select
        SUM(CASE WHEN A=0 THEN 1 ELSE 0 END) AS 'A0', 
		SUM(CASE WHEN A=1 THEN 1 ELSE 0 END) AS 'A1', 
		SUM(CASE WHEN A=2 THEN 1 ELSE 0 END) AS 'A2',
		SUM(CASE WHEN B=0 THEN 1 ELSE 0 END) AS 'B0', 
		SUM(CASE WHEN B=1 THEN 1 ELSE 0 END) AS 'B1',  
		SUM(CASE WHEN B=2 THEN 1 ELSE 0 END) AS 'B2'   
		FROM test
        <where>......</where>
    </select>

结束~

相关推荐
观望过往几秒前
Spring Boot 集成 InfluxDB 2.x 完整技术指南
java·spring boot·influxdb
echoyu.15 分钟前
java源代码、字节码、jvm、jit、aot的关系
java·开发语言·jvm·八股
彭于晏Yan1 小时前
IDEA如何进行远程Debug
java·ide
木木子99994 小时前
业务架构、应用架构、数据架构、技术架构
java·开发语言·架构
qq_5470261796 小时前
Flowable 工作流引擎
java·服务器·前端
鼓掌MVP7 小时前
Java框架的发展历程体现了软件工程思想的持续进化
java·spring·架构
编程爱好者熊浪8 小时前
两次连接池泄露的BUG
java·数据库
lllsure8 小时前
【Spring Cloud】Spring Cloud Config
java·spring·spring cloud
鬼火儿8 小时前
SpringBoot】Spring Boot 项目的打包配置
java·后端
NON-JUDGMENTAL8 小时前
Tomcat 新手避坑指南:环境配置 + 启动问题 + 乱码解决全流程
java·tomcat