sql - 如果在同一个查询中使用相同的 ROUND 和/或 SUM 执行多少次
问题描述
数据库 - SQL Server 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 Server 是否优化了多个sum()
s 但我怀疑它对性能有很大影响。
推荐阅读
- google-api-js-client - Google 课堂仅显示未完成的任务
- python - Colab IndexError:索引 0 超出轴 0 的范围,大小为 0
- c - 无法在降级的 C 程序上运行 VLC
- javascript - 您如何使用 Javascript 计算计算器的简单算术运算?
- javascript - 无论数组大小如何,React for 循环只运行一次
- android - SQLite 从另一个数据库中的一行替换一个数据库中的一行
- python - 熊猫在具有特定条件的行中计数数据
- javascript - slick-carousel - 照片在移动视图中占据屏幕
- pine-script - 如何评估指标显示范围的最大值?
- go - 为什么在没有编写方法的情况下在struct中使用匿名字段可以使类型满足接口?