Mysql 在SELECT中模块化子SELECT定义?
我有一个选择沿着Mysql 在SELECT中模块化子SELECT定义?,mysql,Mysql,我有一个选择沿着 SELECT (very complex calc1) as `amount`, (very complex calc2) as `paid_onlne`, (very complex calc3) as `paid_by_check`, (very complex calc1) - (very complex calc2)-(very complex calc3) as `amount_due` FROM billings GROUP BY billings.id
SELECT
(very complex calc1) as `amount`,
(very complex calc2) as `paid_onlne`,
(very complex calc3) as `paid_by_check`,
(very complex calc1) - (very complex calc2)-(very complex calc3) as `amount_due`
FROM billings
GROUP BY billings.id
所有计算都使用一个或多个子单元选择
以前有人问过这个问题,但我正在寻找一种方法,能够在后续列中重用calc规范1、2、3,而不必反复粘贴代码,从而留下一个很难维护的查询
“这样做的目的不是为了提高性能,而是为了使编辑更容易。在真实应用程序中,Calc1用于4个不同的列中-因此,如果需要更改,我必须执行4次 是的,这是可能的:
相关:我怀疑这样做是否有助于提高性能-但你可以将其作为一个子查询捆绑起来。目的不是提高性能,而是简化编辑。在实际应用中,Calc1在4个不同的列中使用-因此,如果需要更改,我必须进行4次。每个计算实际上已经是一个子查询,所以我不确定是什么你不是说“将其捆绑为子查询”吗?我认为在不知道GROUP by如何与查询的其余部分相匹配的情况下,我们无法确定地回答,但我喜欢LS的想法。
SELECT billings.id,
s1.amount,
s2.paid_onlne,
s3.paid_by_check,
s1.amount - s2.paid_online - s3.paid_by_check as `amount_due`
FROM billings
,LATERAL JOIN (very complex calc1) s1
,LATERAL JOIN (very complex calc2) s2
,LATERAL JOIN (very complex calc3) s3
GROUP BY billings.id;