在postgres函数中需要更好的求和select语句



我的数据库中有两个表。其中一个"orders"包含一组列,其中包含一个整数,表示订单应包含的内容(如a中的5个和B中的15个)。第二个表"production_work"包含相同的订单列和日期,所以每当有人完成订单的一部分时,我都会跟踪它

因此,现在我需要一种快速的方法来知道哪些订单已经完成,我希望避免第一列出现"已完成"表,因为订单是可编辑的,而且保持正确更符合逻辑。

这个查询有效,但写得很糟糕。有什么更好的方法?实际上,有12列进入了这个查询。。。我只是举其中3个例子。

    SELECT *
    FROM orders o
    WHERE ud = (SELECT SUM(ud) FROM production_work WHERE order_id = o.ident)
            AND dp = (SELECT SUM(dp) FROM production_work WHERE order_id = o.ident)
            AND swrv = (SELECT SUM(swrv) FROM production_work WHERE order_id = o.ident)
select o.*
from
    orders o
    inner join
    (
        select order_id, sum(ud) as ud, sum(dp) as dp, sum(swrv) as swrv
        from production_work
        group by order_id
    ) pw on o.ident = pw.order_id
where
    o.ud = pw.ud
    and o.dp = pw.dp
    and o.swrv = pw.swrv

最新更新