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>

结束~

相关推荐
我喜欢山,也喜欢海35 分钟前
Java和go在并发上的表现为什么不一样
java·python·golang
Wenzar_1 小时前
**零信任架构下的微服务权限控制:用Go实现基于JWT的动态访问策略**在现代云原生环境中,
java·python·微服务·云原生·架构
lUie INGA8 小时前
在2023idea中如何创建SpringBoot
java·spring boot·后端
极客on之路8 小时前
mysql explain type 各个字段解释
数据库·mysql
代码雕刻家8 小时前
MySQL与SQL Server的基本指令
数据库·mysql·sqlserver
lThE ANDE8 小时前
开启mysql的binlog日志
数据库·mysql
geBR OTTE9 小时前
SpringBoot中整合ONLYOFFICE在线编辑
java·spring boot·后端
Porunarufu9 小时前
博客系统UI自动化测试报告
java
川石课堂软件测试10 小时前
软件测试:典型面试题库
数据库·python·功能测试·mysql·单元测试·grafana·prometheus
of Watermelon League10 小时前
SpringBoot集成Flink-CDC,实现对数据库数据的监听
数据库·spring boot·flink