sql - 我的查询正确吗?我可以优化它吗?整数的正和和负和
问题描述
我有两种解决方案来求正整数和负整数之和。请告诉哪个更正确和更优化?或者还有其他更优化和正确的查询吗?问:
考虑具有 col1 及以下值的表 A。
col1
20
-20
40
-40
-30
30
我需要以下输出
POSITIVE_SUM NEGATIVE_SUM
90 -90
我有两个解决方案。
/ q1 /
select POSITIVE_SUM,NEGATIVE_SUM from
(select distinct sum(a2.col1) AS "POSITIVE_SUM" from A a1 join A a2 on a2.col1>0
group by a1.col1)
t1
,
(select distinct sum(a2.col1) AS "NEGATIVE_SUM"from A a1 join A a2 on a2.col1<0
group by a1.col1) t2;
/ q2 /
select sum (case when a1.col1 >= 0 then a1.col1 else 0 end) as positive_sum,
sum (case when a1.col1 < 0 then a1.col1 else 0 end) as negative_sum
from A a1;
POSITIVE_SUM NEGATIVE_SUM
90 -90
解决方案
我想知道你是如何想出第一个解决方案的:
- 自连接(两次)表,
- 产生6
(相同的)行,最后distinct
得到 1 行,
- 然后交叉连接 2 个结果。
我准备了一个演示,以便您可以看到导致您的第一个解决方案结果的步骤。
我不知道这是否可以以任何方式进行优化,
但是是否有可能像您的第二个解决方案一样使用条件聚合击败表的单次扫描?
我不这么认为。
推荐阅读
- excel - 用于识别基于不同日期的连续评论评级的 Google 表格/Excel 公式
- go - 有“去卸载”吗?
- django - 在 Django 中填充 db.sqlite:本地主机和生产
- python - 如何使用 Windows 文件资源管理器使用 Python 选择和返回目录?
- streamlit - streamlit date_input 小部件的切换语言
- web-services - Coldfusion 2021 (java 11) 上的 Web 服务中断
- docker - 使用 Flask Swagger 在云端加载 API 定义失败
- google-apps-script - 有没有办法跟踪 Google 表格用户的电子邮件?
- cats-effect - 当前 cat-effects IO 错误处理技术的现状如何?
- c# - 我需要帮助弄清楚如何将浮点值等转移到我的武器系统中的另一个脚本中