是否可以在相同的选择中重用聚合函数结果?
Posted
技术标签:
【中文标题】是否可以在相同的选择中重用聚合函数结果?【英文标题】:Is it possible to reuse aggregate functions results in the same select? 【发布时间】:2011-09-01 10:44:24 【问题描述】:看看这个 TSQL 代码:
SELECT A, B, C, (MAX(A) - MAX(B))*C AS 'myCalculatedColumn',
dbo.[udf_GetBetaInv]((MAX(A) - MAX(B))*C, A, B, C) as 'BetaInv'
FROM dbo.MyTable
WHERE...
有没有办法让块:(MAX(A) - MAX(B))*C
只写一次并在 myCalculatedColumn 定义中使用,也可以作为同一语句中 udf 的参数。
我主要关心性能,不确定 SQL Server 是计算一次还是多次,但即使只计算一次,最好让 SQL 代码更具可读性和紧凑性,并且只有一个地方可以修改,以防我们应该更改一个公式。
编辑。最近有人建议我使用 CROSS APPLY 来解决完全相同的问题:simplify SQL statement by using CTE
【问题讨论】:
【参考方案1】:您可以在 CTE 中定义它
WITH CTE AS
(
SELECT A,
B,
C,
( MAX(A) - MAX(B) ) * C AS myCalculatedColumn
FROM dbo.MyTable
WHERE...
)
SELECT *,
dbo.[udf_GetBetaInv](myCalculatedColumn, A, B, C) as 'BetaInv'
from CTE
或者一个不那么冗长的方法是define it in a CROSS APPLY
。 CTE 适用于更多情况。
【讨论】:
很酷的作品就像一个魅力,同样的表现,但更干净的代码,谢谢!!以上是关于是否可以在相同的选择中重用聚合函数结果?的主要内容,如果未能解决你的问题,请参考以下文章