我已经提出了基于特定组计算字段总数的解决方案,但是要达到我所期望的结果似乎需要很长时间。
我对sql有一些基本知识。
有没有明显的改进?为什么?
为什么我想缩短这个:更容易在ORM类型的系统中实现。
更改方案不是一个选项。
架构和示例数据:http://sqlfiddle.com/#!9/62df6
我正在使用的查询:

SELECT s.release_id,
       (s.shipments_total - IFNULL(sh.shipment_entries, 0)) AS shipments_left
FROM
  ( SELECT release_id,
           SUM(shipments) AS shipments_total
   FROM subscriptions
   WHERE is_paid = 1
     AND shipments > 1
   GROUP BY release_id ) AS s
LEFT JOIN
  ( SELECT release_id,
           COUNT(*) AS shipment_entries
   FROM shipments
   GROUP BY release_id ) AS sh ON s.release_id = sh.release_id

样本数据的预期结果在sqlfiddle中。

最佳答案

如果您将条件输入并移除group by,则不需要ifnull()

   SELECT s.release_id,
          (SUM(s.Shipments) -
           (SELECT COUNT(*)
            FROM shipments sh
            WHERE sh.release_id = s.release_id
           )
          ) AS shipments_left
   FROM subscriptions s
   WHERE is_paid = 1 AND shipments > 1
   GROUP BY s.release_id;

子查询返回0如果没有匹配项,则返回NULL(使用GROUP BY,则返回NULL)。我不确定你的ORM模型是否更简单。从SQL的角度来看,您的原始版本很好。

08-05 07:02