dwz table增加总计、小计

简介: 版权声明:欢迎转载,请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/41241751 本篇来介绍dwz table增加总计、小计,总计代表所有分页的数据总和,小计代表当前页面的数据总和。
版权声明:欢迎转载,请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/41241751

本篇来介绍dwz table增加总计、小计,总计代表所有分页的数据总和,小计代表当前页面的数据总和。


我先说明一下小计和总计的概念,假如当前查询结果有100条记录,当前页显示50条,其中有一列是统计资金综合的,假如每个人当前资金为1元,那么第一页的小计就是50元,总计就是100元,那么如果处理好这个数据统计呢,下面是我们当前执行的方案,显示效果见下图



方案:首先根据条件查询出列表,然后再根据条件查询出总计,然后再通过计算得出小计,刚开始的时候是把查询列表和总计通过union进行关联一并查询出,后来有同事说通过两个查询会好一点,但是我暂时不确定是否会得到性能上的优化,这个没有数据得到论证,这是一个疑问点,接下来就必须通过数据进行论证这两者之间哪一个性能优。

第一步,查询出列表

<select id="getDepositListBySelective" resultType="hashmap" parameterType="map">
		select m.username username, d.RealName realname,
			COALESCE (d.BeginMoney, 0) AS beginmoney,
			COALESCE (d.InMoney,0) AS inmoney ,

第二步,查询出总计

<select id="getDeposittotalListBySelective" resultType="hashmap" parameterType="map">
		SELECT '总计:' username,'' realname,
	       	COALESCE (ROUND(SUM(d.BeginMoney),2), 0) AS beginmoney,
			COALESCE (ROUND(SUM(d.InMoney),2),0) AS inmoney ,

第三步,通过调用小计计算方法得出列表、小计、总计的列表

	List dailyDepositlist = listWithSumByTwoZero(
					this.reportMapper.getDepositListBySelective(vo, vo.createRowBounds()),
					this.reportMapper.getDeposittotalListBySelective(vo));

第四步,关键的小计算法,首先通过一次数据循环,根据列关键字,得出需要计算小计的当前列的小计

	protected List listWithSumByTwoZero(List preList, List totalList) {
		// 获取总计数据,获知那一列需要进行小记
		Map totalMap = (Map) totalList.get(0);


		// 获取总计的key
		Iterator keySet = totalMap.keySet().iterator();


		// 创建一行小计
		Map subTotalMap = new HashMap();


		// 统计小计需要计算的列
		Map<String, BigDecimal> shouldSumMap = new HashMap<String, BigDecimal>();
		List<String> shouldSumList = new ArrayList<String>();


		// 初始化
		while (keySet.hasNext()) {
			String key = (String) keySet.next();
			Object totalValue = totalMap.get(key);


			if (totalValue.equals("总计:")) {
				subTotalMap.put(key, "小计:");
			}
			// 如果当前列不需要统计
			else if (totalValue.equals("")) {
				subTotalMap.put(key, totalValue);
			} else {
				shouldSumMap.put(key, BigDecimal.ZERO);
				shouldSumList.add(key);
				subTotalMap.put(key, 0);
			}
		}


		// 如果获取的list不为空
		if (preList != null && preList.size() > 0) {
			// 对需要统计小计的进行计算
			for (int i = 0; i < preList.size(); i++) {
				Map preMap = (Map) preList.get(i);


				for (String key : shouldSumList) {
					BigDecimal temp = shouldSumMap.get(key);


					BigDecimal preDecimal = new BigDecimal(preMap.get(key).toString());
					temp = temp.add(preDecimal);
					shouldSumMap.put(key, temp);
				}
			}
		}


		// 计算过的数据进行更新
		for (String key : shouldSumMap.keySet()) {
			subTotalMap.put(key, shouldSumMap.get(key));
		}


		preList.add(subTotalMap);
		preList.add(totalMap);


		return preList;
	}



总结:小计的算法虽然能够在一次循环查询出多个小计结果,但是总感觉不够简便,另外列表和总计的查询,总觉得性能很差。


相关文章
|
算法 生物认证 开发工具
Guideline 5.1.2 - Legal - Privacy - Data Use and Sharing
你的应用程序收集的设备信息可能包括以下一些:attributesOfItemAtPath:error:, NSLocaleCountryCode, NSFileSystemSize, NSHomeDirectory,和serviceSubscriberCellularProviders。
763 0
|
C语言
C语言之斗地主游戏
该代码实现了一个简单的斗地主游戏,包括头文件引入、宏定义、颜色枚举、卡牌类、卡牌类型类、卡牌组合类、玩家类、游戏主类以及辅助函数等,涵盖了从牌的生成、分配、玩家操作到游戏流程控制的完整逻辑。
398 8
|
8月前
|
移动开发 前端开发 开发者
React 音频播放控制组件 Audio Controls
本文介绍了如何使用React构建音频播放控制组件,涵盖HTML5 `&lt;audio&gt;`标签和React组件化思想的基础知识。针对常见问题如播放状态管理、进度条更新不准确及跨浏览器兼容性,提供了详细的解决方案和代码示例。同时,还总结了易错点及避免方法,如确保音频加载完成再操作、处理音频错误等,帮助开发者实现稳定且功能强大的音频播放器。
356 11
|
存储 Ubuntu 机器人
机械臂手眼标定详解
这篇文章是关于机械臂手眼标定的详细教程,包括了使用ROS1 Noetic和Realsense D415相机在Ubuntu 20.04环境下进行标定的步骤和配置方法。
1698 0
机械臂手眼标定详解
|
调度 Docker 容器
Docker Swarm集群和节点
【10月更文挑战第6天】
226 2
|
机器学习/深度学习 人工智能 自然语言处理
【机器学习】python之人工智能应用篇--游戏生成技术
游戏生成技术,特别是生成式人工智能(Generative Artificial Intelligence, 简称Generative AI),正逐步革新游戏开发的多个层面,从内容创作到体验设计。这些技术主要利用机器学习、深度学习以及程序化内容生成(Procedural Content Generation, PCG)来自动创造游戏内的各种元素,显著提高了开发效率、丰富了游戏内容并增强了玩家体验。以下是生成式AI在游戏开发中的几个关键应用场景概述
406 2
|
API UED 开发者
如何在Uno Platform中轻松实现流畅动画效果——从基础到优化,全方位打造用户友好的动态交互体验!
【8月更文挑战第31天】在开发跨平台应用时,确保用户界面流畅且具吸引力至关重要。Uno Platform 作为多端统一的开发框架,不仅支持跨系统应用开发,还能通过优化实现流畅动画,增强用户体验。本文探讨了Uno Platform中实现流畅动画的多个方面,包括动画基础、性能优化、实践技巧及问题排查,帮助开发者掌握具体优化策略,提升应用质量与用户满意度。通过合理利用故事板、减少布局复杂性、使用硬件加速等技术,结合异步方法与预设缓存技巧,开发者能够创建美观且流畅的动画效果。
310 0
|
数据可视化 开发工具 计算机视觉
LabVIEW视觉采集软件(VAS)、视觉生成器(VB)和视觉开发模块(VDM)之间有什么不同
LabVIEW视觉采集软件(VAS)、视觉生成器(VB)和视觉开发模块(VDM)之间有什么不同
267 1
|
负载均衡 网络协议 数据安全/隐私保护
详解配置代理和IP设置的含义
详解配置代理和IP设置的含义
779 6