首页 > 解决方案 > PostgreSQL 中的方程只返回 0

问题描述

所以我有这些查询来获得低于 95 的停机时间百分比,但这个查询只返回 0 的问题是我不明白为什么,因为我输入的数据具有值。请参阅以下查询:

SELECT ROUND(
    (
        (SELECT COUNT(*) AS terminal_down_count FROM dashboard.availability WHERE availability_percentage < 95 AND availability_date = '2020-04-05'
        ) / t.terminal_count
    ) * 100, 9)
FROM(
SELECT COUNT(*) AS terminal_count
FROM dashboard.availability
WHERE availability_date = '2020-04-05'
)t

如果我突出显示查询SELECT COUNT(*) AS terminal_down_count FROM dashboard.availability WHERE availability_percentage < 95 AND availability_date = '2020-04-05' 这将返回:

在此处输入图像描述

如果我突出显示此查询SELECT COUNT(*) AS terminal_count FROM dashboard.availability WHERE availability_date = '2020-04-05,它将返回此结果:

在此处输入图像描述

所以基本上我试图在等式中返回的是这样的:

(146 / 4,272) * 100 = 3.42

但它上面的整体查询只输出0。

标签: sqlpostgresql

解决方案


尝试以下,转换terminal_down_count为浮动。所以乘以1.0如下所示或强制转换为浮动。这是示例

SELECT ROUND(
    (
        (SELECT 
          COUNT(*) AS terminal_down_count 
          FROM dashboard.availability 
          WHERE availability_percentage < 95 
          AND availability_date = '2020-04-05'
        )*1.0 / t.terminal_count
    ) * 100, 9)
FROM(
SELECT COUNT(*) AS terminal_count
FROM dashboard.availability
WHERE availability_date = '2020-04-05'
)t

推荐阅读