sql - 如何避免在 SQL 中多次计算相同的表达式
问题描述
在以下 SQL 中,SUM(i) 和 SUM(y) 的计算不止一次:
SELECT
IF(SUM(i) > 3000, 3000, SUM(i)) AS total_x,
CASE
WHEN SUM(y) > 3000 THEN 3000
WHEN SUM(y) < 0 THEN 0
ELSE SUM(y)
END AS total_y
FROM t
是否有任何方法可以只计算一次 SUM(i) 和 SUM(y)(以获得更好的性能),或者 SQL 引擎足够聪明,可以在内部优化它而无需人工干预?
我的数据库引擎在 Hive 中,但是这个问题可以应用于任何 SQL 数据库。
解决方案
您可以使用CTE
:
WITH CTE AS (SELECT SUM(i) AS SUM_I, SUM(y) AS SUM_Y
FROM t)
SELECT
IF(SUM_I > 3000, 3000, SUM_I) AS total_x,
CASE
WHEN SUM_Y > 3000 THEN 3000
WHEN SUM_Y < 0 THEN 0
ELSE SUM_Y
END AS total_y
FROM CTE
推荐阅读
- java - 为什么我无法获得对地图中某个值的引用?
- swift - 使用正文中文件的密钥上传 Alamofire 照片
- unity3d - 使用 Windows GitlabRunner 找不到 Unity 的构建输出
- javascript - 烧瓶上的“错误请求”错误
- google-maps - Google Places API 半径
- java - 通过套接字发送字符串时 Java 流损坏
- kubernetes - Kubernetes 集群外的 Prometheus
- java - java - Tomcat 数据库连接池未在 websocket 服务器端点中提供连接
- azure - 逻辑应用 - 使用路径获取 Blob 内容
- angularjs - 自定义指令抛出 -- 错误:$compile:ctreq Missing Required Controller