欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于HQL和JDBC SQL中字段相除的一点小经验

程序员文章站 2022-06-08 11:28:31
...

最近在做一个功能,产品期望做出如下一个报表出来,其中节点名称、超期完成数和完成总数分别对应数据库中一个字段,而超期比例则是需要通过 [超期完成数÷完成总数] 计算出来:

节点名称 超期完成数 完成总数 超期比例
发起者部门主管 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下结果,写起来还是很简单的嘛:

关于HQL和JDBC SQL中字段相除的一点小经验
            
    
    博客分类: Javahibernate  
 

  • 第二步,要计算超期比例,那么可以通过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下结果是这样的:

关于HQL和JDBC SQL中字段相除的一点小经验
            
    
    博客分类: Javahibernate  
 

本以为超期比例会是小数位0.xx,结果直接返回了整数0,显然计算结果是错误的!!!当时我的内心是崩溃的~~~

 

  • 调试BUG:于是开始了漫长的分析,我通过调试工具发现'超期比例'通过Hibernate返回的是Long字段类型,估计某一步操作时将小数转换为整数了。反正产品要求我显示百分比,那么结果可以乘以100,于是我在Mysql下将超期比例SQL改为这样:
(FINISH_OVER_CASE_COUNT/FINISH_CASE_COUNT)*100 AS '超期比例'

 

MYSQL下结果终于正确了:

关于HQL和JDBC SQL中字段相除的一点小经验
            
    
    博客分类: Javahibernate  

 

经过测试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 的写法,该结果就是小数)。

  • 关于HQL和JDBC SQL中字段相除的一点小经验
            
    
    博客分类: Javahibernate  
  • 大小: 30.7 KB
  • 关于HQL和JDBC SQL中字段相除的一点小经验
            
    
    博客分类: Javahibernate  
  • 大小: 41 KB
  • 关于HQL和JDBC SQL中字段相除的一点小经验
            
    
    博客分类: Javahibernate  
  • 大小: 39 KB