You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SQL查询中重复使用SUM(MY_INDICATOR)会被计算两次还是仅优化计算一次?

关于重复计算SUM(MY_INDICATOR)的问题

放心,绝大多数现代关系型数据库(比如MySQL、PostgreSQL、SQL Server、Oracle这类主流产品)都会自动优化这个查询——只会执行一次SUM(MY_INDICATOR)的聚合操作,不会重复计算。

数据库的查询优化器可不是吃素的,它能识别到同一个聚合函数在查询中被多次引用。执行的时候,它会先对每个分组计算出SUM(MY_INDICATOR)COUNT(*)这两个值,然后把SUM的结果同时用到MY_SUMMY_RATE的计算里,完全不会重复扫描数据做两次求和。

当然,如果你碰到的是那种非常老旧、优化能力极弱的轻量级数据库(比如某些嵌入式小数据库),可能存在重复计算的情况,但这种场景现在已经很少见了。

要是你实在担心(或者就是想写得更清晰),也可以用CTE或者子查询显式复用聚合结果,比如:

WITH grouped_data AS (
    SELECT ID, SUM(MY_INDICATOR) AS MY_SUM, COUNT(*) AS MY_COUNT
    FROM SOMETABLE
    GROUP BY ID
)
SELECT ID, MY_SUM, MY_SUM / MY_COUNT AS MY_RATE
FROM grouped_data

不过说实话,这种写法和你原来的查询在执行效率上没区别,优化器对两种写法的处理逻辑是一致的,只是显式写法可读性可能更好一点。

内容的提问来源于stack exchange,提问作者nbot

火山引擎 最新活动