【问题标题】:Substract 2 columns from postgreSQL LEFT JOIN query with NULL values从具有 NULL 值的 postgreSQL LEFT JOIN 查询中减去 2 列
【发布时间】:2013-03-01 14:35:12
【问题描述】:

我有一个 postgreSQL 查询,它应该是我们实验室的实际样本库存。 初始样本取自一个表 (tblStudies),但随后有 2 个表可供查找以减少样本量。 所以我对这两个表进行了联合查询,然后将 uniun 查询与 tblStudies 匹配以计算实际库存。 但是联合查询仅在样本减少时才给出值。 因此,当研究仍然具有初始样本时,不会返回该值。 我想我应该使用 JOIN 操作,但是我的研究中有初始样本的 NULL 值。

这是我走了多远,请帮忙?

SELECT
    "tblStudies"."Studie_ID", "SamplesWeggezet", c."Stalen_gebruikt", "SamplesWeggezet" - c."Stalen_gebruikt" as "Stock"
FROM
    "Stability"."tblStudies"
    LEFT JOIN
    (
        SELECT b."Studie_ID",sum(b."Stalen_gebruikt") as "Stalen_gebruikt"
        FROM (
            SELECT "tblAnalyses"."Studie_ID", sum("tblAnalyses"."Aant_stalen_gebruikt") AS "Stalen_gebruikt"
            FROM "Stability"."tblAnalyses"
            GROUP BY "tblAnalyses"."Studie_ID"
            UNION 
            SELECT "tblStalenUitKamer"."Studie_ID", sum("tblStalenUitKamer".aant_stalen) AS "stalen_gebruikt"
            FROM "Stability"."tblStalenUitKamer"
            GROUP BY "tblStalenUitKamer"."Studie_ID"
        ) b
        GROUP BY b."Studie_ID"
    ) c ON "tblStudies"."Studie_ID" = c."Studie_ID"

【问题讨论】:

    标签: database postgresql join


    【解决方案1】:

    因为您正在对内联查询“C”执行 LEFT JOIN,所以c."stalen_gebruikt" 的某些值可以为空。任何数字 - null 都会产生 null。为了解决这个问题,我们可以使用合并

    所以改变

    "samplesweggezet" - c."stalen_gebruikt" AS "Stock

    "samplesweggezet" - COALESCE(c."stalen_gebruikt",0) AS "Stock

    【讨论】:

    • 谢谢,完成了这项工作。我不知道 COALESCE 函数
    猜你喜欢
    • 2013-12-16
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 2023-03-16
    • 2014-05-23
    • 2021-12-22
    • 2019-04-25
    • 2021-04-25
    相关资源
    最近更新 更多