Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在SELECT中模块化子SELECT定义?_Mysql - Fatal编程技术网

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;