如何解决 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





目录
相关文章
|
6天前
|
SQL Oracle 网络协议
小白也能学会的《Oracle数据库的安装与基本配置》
小白也能学会的《Oracle数据库的安装与基本配置》
23 1
|
6天前
|
运维 Oracle 关系型数据库
医院检验科LIS系统源码,oracle数据库、报告管理、质控管理
医院检验科LIS系统源码,oracle数据库、报告管理、质控管理
24 0
|
7天前
|
运维 Oracle 关系型数据库
LIS实验室信息管理系统功能模块(Oracle数据库、Client/Server架构)
LIS实验室信息管理系统功能模块(Oracle数据库、Client/Server架构)
25 0
|
7天前
|
Oracle 小程序 关系型数据库
laravel5.8(十四)连接oracle数据库
首先确定你的PHP已经支持oracle数据库的链接。PHP需要安装OCI8扩展。 确定PHP可以链接ORACLE数据库之后。我们使用composer安装laravel支持oracle链接的插件 yajra/laravel-oci8 欢迎访问个人博客 guanchao.site 欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的” 一:使用composer安装 yajra/laravel-oci8 1 :运行如下命令: bash 复制代码 composer require yajra/laravel-oci8 2 :安装过程中可能会报错,不要纠结那些报错,最简单的解决办法:
21 0
|
7天前
|
Oracle 关系型数据库 MySQL
php7.2安装OCI8扩展支持oracle数据库
做项目的时候,远程的oracle数据库为我们提供一张中间表,我这边业务中的一些数据是需要到oracle数据库中的这张中间表去查询的。 PHP连接oracle数据库。需要用到OCI8的扩展。说来惭愧,工作这么多年,还没有正经的使用过oracle数据库。 mysql数据库的语法跟oracle数据库的语法是不一样的,别跟我似的上来就用mysql的语法来操作oracle数据库……有点丢人了…… 今天我们大概记录一下OCI8扩展的安装过程。
29 0
|
7天前
|
SQL Oracle 关系型数据库
Oracle,Postgresql等数据库使用
Oracle,Postgresql等数据库简单使用
36 0
Oracle,Postgresql等数据库使用
|
26天前
|
Oracle 关系型数据库 数据库
在Flink CDC中,使用Oracle 11g数据库的NUMBER类型作为主键
在Flink CDC中,使用Oracle 11g数据库的NUMBER类型作为主键
19 1
|
29天前
|
Oracle 关系型数据库 数据库
Navicat连接Oracle数据库
Navicat连接Oracle数据库
|
1月前
|
Oracle 关系型数据库 Java
thin/oci两种方式连接Oracle数据库
thin/oci两种方式连接Oracle数据库
15 0
|
1月前
|
SQL Oracle 关系型数据库
SQL Developer生成Oracle数据库的关系模型(ER图)
SQL Developer生成Oracle数据库的关系模型(ER图)
推荐文章
更多
推荐镜像
更多