如何解决 Oracle数据库 俩个整数相除结果为0 的问题

简介: 如何解决 Oracle数据库 俩个整数相除结果为0 的问题

1:前言

最近开发遇到一个问题,就是我求任务完成率=完成数量/计划数量*100查询到,由于计划任务数量和完成任务数量都是整数,所以导致相除的时候,结果都是 0

1、我写的SQL:

SELECT SYSDATE                                                             AS 更新时间,
       '60'                                                                AS 密级,
       统计日期,
       创建时间,
       生产类型,
       计划数量,
       完成数量,
       DECODE(COALESCE(计划数量,0), 0, 0, ROUND(完成数量 / 计划数量, 2) * 100) AS 完成率
FROM (SELECT TO_CHAR(DATA_TIME, 'yyyy-mm')            AS 统计日期,
             STAT_TIME                                AS 创建时间,
             PROD_TYPE                                AS 生产类型,
             (SELECT COUNT(WORK_ORDER_ID)
              FROM BRAIN.DWS_WORK_ORDER_INFO
              GROUP BY TO_CHAR(DATA_TIME, 'yyyy-mm')) AS 计划数量,
             (SELECT COUNT(WORK_ORDER_ID)
              FROM BRAIN.DWS_WORK_ORDER_INFO
              WHERE IF_COMP = '是'
              GROUP BY TO_CHAR(DATA_TIME, 'yyyy-mm')) AS 完成数量
      FROM BRAIN.DWS_WORK_ORDER_INFO)

执行结果:

f7e0fdf2da6349aabc09361b53bc9774.png

明明7/8 等于 0.875,可结果确实0

2:结果思路

select  7/8 AS 完成率  from dual;

e6c9a961ab0e4ab8a9015a47888c841a.png

完成率:俩个Integer 类型相除肯定会是整数

后来我修改了一下,把Integer 类型转成 flaot 类型,

b1ed8b4b5947490691f20f77df64cb6d.png

3:原本的SQL 修改如下:

CAST(COUNT(WORK_ORDER_ID) AS float)
SELECT SYSDATE                                                             AS 更新时间,
       '60'                                                                AS 密级,
       统计日期,
       创建时间,
       生产类型,
       计划数量,
       完成数量,
       DECODE(COALESCE(计划数量,0), 0, 0, ROUND(完成数量 / 计划数量, 2) * 100) AS 完成率
FROM (SELECT TO_CHAR(DATA_TIME, 'yyyy-mm')            AS 统计日期,
             STAT_TIME                                AS 创建时间,
             PROD_TYPE                                AS 生产类型,
             (SELECT CAST(COUNT(WORK_ORDER_ID) AS float)
              FROM BRAIN.DWS_WORK_ORDER_INFO
              GROUP BY TO_CHAR(DATA_TIME, 'yyyy-mm')) AS 计划数量,
             (SELECT CAST(COUNT(WORK_ORDER_ID) AS float)
              FROM BRAIN.DWS_WORK_ORDER_INFO
              WHERE IF_COMP = '是'
              GROUP BY TO_CHAR(DATA_TIME, 'yyyy-mm')) AS 完成数量
      FROM BRAIN.DWS_WORK_ORDER_INFO)

结果:

4b8ca6f13afb4c819b97857ef1fdeeda.png





目录
相关文章
|
1月前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
166 64
|
24天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
32 7
|
24天前
|
Oracle 关系型数据库 数据库
oracle数据库技巧
【10月更文挑战第25天】oracle数据库技巧
25 6
|
24天前
|
存储 Oracle 关系型数据库
Oracle数据库优化策略
【10月更文挑战第25天】Oracle数据库优化策略
20 5
|
1月前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
|
1月前
|
监控 Oracle 关系型数据库
Oracle数据库性能优化
【10月更文挑战第16天】Oracle数据库性能优化是
31 1
|
1月前
|
存储 Oracle 关系型数据库
【数据库-Oracle】《Oracle 数据库探秘:基础知识点全攻略》
《Oracle 数据库探秘:基础知识点全攻略》深入介绍 Oracle 数据库的基础知识点,包括数据类型、表结构、查询语句等。通过详细讲解、代码示例和流程图,帮助读者快速掌握 Oracle 数据库的基本操作,为数据库开发和管理打下坚实基础。
39 0
|
13天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
28 1
|
15天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
29 4
|
22天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
109 1

推荐镜像

更多
下一篇
无影云桌面