我已经提出了基于特定组计算字段总数的解决方案,但是要达到我所期望的结果似乎需要很长时间。
我对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的角度来看,您的原始版本很好。