如何在 postgresql 中转换为十进制?

新手上路,请多包涵

下面查询中的 Percent_Failure 给出的结果为 1.00 或 0.00。谁能帮我理解为什么它没有给我实际的小数?

 SELECT
    sf.hierarchy_name AS Hierarchy_Name,
    cl.cmh_id AS CMH_ID,
    cl.facility_name AS Clinic_Name,
    sf.billing_city AS City,
    sf.billing_state_code AS State,
    cl.num_types AS Num_Device_Dypes,
    cl.num_ssids AS Num_SSIDs,
    SUM(CAST(CASE WHEN (d.mdm_client_version NOT LIKE '1.14%' AND d.type = 'Wallboard')
        OR (d.mdm_client_version NOT LIKE '1.14%' AND d.type = 'Tablet')
        OR (d.mdm_client_version NOT LIKE '1.14%' AND d.type = 'AndroidMediaPlayer')
        OR (d.mdm_client_version NOT LIKE '1.14%' AND d.type = 'InfusionRoomTablet') THEN 1 ELSE 0 END AS INTEGER))  AS Non_Updated,
    COUNT(d.asset_id) AS Total_Devices
    CAST((Non_Updated) / (Total_Devices) AS DECIMAL (5,4)) AS Percent_Failure
FROM
    (SELECT id, clinic_table_id, type, asset_id, mdm_client_version, device_apk_version, ssid
    FROM mdm.devices) d
JOIN
    (SELECT a.id, a.cmh_id, a.facility_name, COUNT(DISTINCT b.ssid) AS num_ssids, COUNT(DISTINCT b.type) AS num_types
    FROM mdm.clinics a
        JOIN
            (SELECT *
            FROM mdm.devices
            WHERE status = 'Active'
            AND last_seen_at >= (CURRENT_DATE - 2)
            AND installed_date <= (CURRENT_DATE - 3)) b
            ON a.id = b.clinic_table_id
    GROUP BY 1,2,3) cl
    ON d.clinic_table_id = cl.id
JOIN
    (SELECT x.cmh_id, x.hierarchy_group, x.hierarchy_name, x.billing_city, x.billing_state_code
    FROM salesforce.accounts x) sf
    ON sf.cmh_id = cl.cmh_id
GROUP BY 1,2,3,4,5,6,7
ORDER BY 10 DESC;

原文由 Nick Dunn 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 516
1 个回答

将分子转换为小数

CAST(Non_Updated) 作为十进制 / Total_Devices

例如

select cast(3 as decimal)/4 ;

原文由 kittur_riyaz 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进