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>

结束~

相关推荐
MrSYJ6 分钟前
UserDetailService是在什么环节生效的,为什么自定义之后就能被识别
java·spring boot·后端
long3161 小时前
构建者设计模式 Builder
java·后端·学习·设计模式
吐个泡泡v1 小时前
Maven 核心命令详解:compile、exec:java、package 与 IDE Reload 机制深度解析
java·ide·maven·mvn compile
HMBBLOVEPDX1 小时前
MySQL的锁:
数据库·mysql
天上掉下来个程小白1 小时前
微服务-01.导入黑马商城
java·微服务·架构
Noii.2 小时前
Spring Boot初级概念及自动配置原理
java·spring boot·后端
探索java2 小时前
Tomcat Server 组件原理
java·后端·tomcat
勿在浮沙筑高台2 小时前
无法获取实体类com.example.springdemo2.entity.po.UserPO对应的表名!
java·spring boot·mybatis
用户8356290780512 小时前
Java使用Spire.Doc实现Word转PDF:格式精准的自动化解决方案
java
陆小叁2 小时前
基于Flink CDC实现联系人与标签数据实时同步至ES的实践
java·elasticsearch·flink