最近在做一个功能,产品期望做出如下一个报表出来,其中节点名称、超期完成数和完成总数分别对应数据库中一个字段,而超期比例则是需要通过 [超期完成数÷完成总数] 计算出来:
节点名称 | 超期完成数 | 完成总数 | 超期比例 |
发起者部门主管 | 2 | 4 | 50% |
发起人 | 1 | 5 | 20% |
- 第一步,我编写了如下SQL将前三列数据展现出来:
SELECT NODE_ACTIVITY_NAME AS '节点名称', FINISH_OVER_CASE_COUNT AS '超期完成数', FINISH_CASE_COUNT AS '完成数' FROM RPT_WF_ANALYSIS_NODE WHERE FINISH_OVER_CASE_COUNT > 0
MYSQL下结果,写起来还是很简单的嘛:
- 第二步,要计算超期比例,那么可以通过SQL来做,超期比例=超期完成数÷完成总数(黄底色代码):
SELECT NODE_ACTIVITY_NAME AS '节点名称', FINISH_OVER_CASE_COUNT AS '超期完成数', FINISH_CASE_COUNT AS '完成数', FINISH_OVER_CASE_COUNT/FINISH_CASE_COUNT AS '超期比例' FROM RPT_WF_ANALYSIS_NODE WHERE FINISH_OVER_CASE_COUNT > 0
MYSQL下结果是这样的:
本以为超期比例会是小数位0.xx,结果直接返回了整数0,显然计算结果是错误的!!!当时我的内心是崩溃的~~~
- 调试BUG:于是开始了漫长的分析,我通过调试工具发现'超期比例'通过Hibernate返回的是Long字段类型,估计某一步操作时将小数转换为整数了。反正产品要求我显示百分比,那么结果可以乘以100,于是我在Mysql下将超期比例SQL改为这样:
(FINISH_OVER_CASE_COUNT/FINISH_CASE_COUNT)*100 AS '超期比例'
MYSQL下结果终于正确了:
经过测试HQL/SQL都可以用这种方法。这个纠结的问题终于解决了,楼主我灰常高兴啊。看到同事的代码也有同样问题,还顺手协助他们修改了。
- 结果过了两天,测试同学报BUG了:在有超期完成数的情况下,超期比例还是0%。
连上数据库确实,妈蛋,SqlServer回显,什么情况~~~于是又继续苦逼地思考......
忽然看到BUG单上说,另一个页面类似功能就正常的,然后就找那块的开发勾兑了一下,发现人家的关键SQL是这样写的:
1.0*FINISH_OVER_CASE_COUNT/FINISH_CASE_COUNT
于是我又修改了我的SQL,终于正常了:
SELECT NODE_ACTIVITY_NAME AS '节点名称', FINISH_OVER_CASE_COUNT AS '超期完成数', FINISH_CASE_COUNT AS '完成数', 100 * FINISH_OVER_CASE_COUNT / FINISH_CASE_COUNT AS '超期比例' FROM RPT_WF_ANALYSIS_NODE WHERE FINISH_OVER_CASE_COUNT > 0
- 总结一下:
以上举例我用的是SQL,而实际开发过程中我用的HQL,两者都是一样的,所以均可做参考。
对于字段相除,我的感觉是:结果是跟第一个字段单位走的,如FINISH_OVER_CASE_COUNT是整数,则HQL返回的字段类型也是整数;如果该字段是带小数位的数字则返回结果应该就是小数了(参考1.0*FINISH_OVER_CASE_COUNT/FINISH_CASE_COUNT 的写法,该结果就是小数)。
相关推荐
之前写好SQL,再到代码里面来写,语句复杂的看的时不时细节会忘记,用sql转换hql工具,直接贴近了就可以了;
HQL与SQL的区别
// 具有子查询的sql String hql = "select id,name from (select id from table_1 where id={p0}) t1 inner join (select name --this is name\n from table_2) t2"; // 获取id字段的血缘 LineageNode idNode = ...
NULL 博文链接:https://heroxuan.iteye.com/blog/1074163
整理的HQL & SQL对比学习文档,程序员有用
HQL批量插入、更新和删除 HQL批量插入、更新和删除 HQL批量插入、更新和删除
hql开窗函数.sql
HQL语句 HQL语句 HQL语句 HQL语句 HQL语句
HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL...
SQL Beautify:grinning_face:格式化你杂乱无章的sql/hql代码:grinning_face: VS Code extension that beautifies SQL(HQL).:camera_with_flash: 安装 Installation:light_bulb: 注意 Attention这个插件在hql语句上...
NSQL和HQL的简单操作
HQL语句查询
不喜欢使用myEclipse的...最近在项目中使用Hibernate,由于需要使用HQL,找了很多资料,大都是MyEclipse中自带的HQL工具。 由于MyEclipse是收费的,速度不是很理想。所以在网上找到了一个elipse插件 英文图文教程 ...
◆使用的SQL语言不同:JDBC使用的是基于关系型数据库的标准SQL语言,Hibernate使用的是HQL(Hibernate query language)语言 ◆操作的对象不同:JDBC操作的是数据,将数据通过SQL语句直接传送到数据库中执行,...
关于HQL相关的论文, 关于HQL相关的论文,
Hibernate中的查询:HQL、Criteria、原生SQl的Demo,希望可以帮助大家理解Hibernate查询。
不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询在涵盖Criteria查询的所有功能的前提下,提供了类似标准SQL语句的查询...
hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全
Hql语句注意事项总结 1.在Hql中使用group by的问题 2.在count()中使用别名问题 3.关于Integer和Long的问题 4.关于参数是数组的问题
HQL语句大全HQL语句大全HQL语句大全HQL语句大全HQL语句大全