如果在同一个查询中使用同一个 ROUND and/or SUM 执行多少次

How many times does the same ROUND and/or SUM execute if used in the same query

DB - SQL 服务器 201x

下面的代码部分是从测试工具中提取的更改内容

我的问题是:执行相同 ROUND(SUM(...)) 部分的 运行 时间有多聪明

它是执行第一次出现并将结果用于后续出现的结果,还是多次执行。

在 SQL Server

中有更聪明的方法吗
select
    person.Name 'Name',
    account.AccountCode 'Account Code',
    ROUND(SUM(account.basevalue + account.accuredInteres), 2)    'Account Total'
    case 
        when ROUND(SUM(account.basevalue + account.accuredInteres), 2) =  ROUND(CAST(audit_data.total as decimal(21,6)), 2) then 'MATCH'
        when 
            ROUND(SUM(account.basevalue + account.accuredInteres), 2)  <= ROUND(CAST(audit_data.total as decimal(21,6)), 2) * 1.01 AND
            ROUND(SUM(faccount.basevalue + account.accuredInteres), 2)  >= ROUND(CAST(audit_data.total as decimal(21,6)), 2) * 0.99
            then 'IN TOLERENCE'
        else 'NOT MATCHING' END 'Values Equal ?'
from
    ----
    ----
where 
    ----

答案取决于执行计划。在这种情况下,我希望 round() 对结果集中的每一行执行 7 次。但是,通常在聚合查询中,结果集比初始数据小得多,因此这可能会增加查询的开销。

sum()则另当别论。执行多少次并不重要。操作的昂贵部分是聚合,通常比单个聚合函数要多得多。

我不确定 SQL 服务器是否优化了多个 sum(),但我怀疑它对性能有多大影响。

唯一可以确定的方法是将计算字段 ROUND(SUM(account.basevalue + account.accuredInteres), 2) 作为普通字段,然后在外部 sql select 但这并不是对所有情况都更好的方法,可能不适合您的完整陈述。但是,您可以在大型数据集上尝试它以查看计划和执行时间。我相信额外的费用会很少。