在一个SELECT中模块化子选择定义?

问题描述 投票:0回答:1

我有一个SELECT,内容如下

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,而不必一遍又一遍地粘贴代码--留下一个非常难以维护的查询。

mysql
1个回答
1
投票

"目的不是为了提高性能,而是为了让编辑更容易。真正的应用程序中的calc1在4个不同的列中使用--所以如果需要改变,我必须做4次。

是的,这是有可能的。纬度连接 - MySQL 8.0.14:

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;

相关的。PostgreSQL:在同一查询中使用计算过的列。

© www.soinside.com 2019 - 2024. All rights reserved.