sql - 左连接临时表时,将表达式转换为数据类型 int 时出现算术溢出错误
问题描述
当尝试 LEFT JOIN 我拥有的两个临时表时,我遇到了算术溢出错误。执行 UNION 时没有问题,当我将 SELECT 语句更改为不使用 SUM 函数时也没有问题。这是我的两张表:
SELECT SUM(count) count
, EventType
, month
FROM #engine_final
GROUP BY EventType
, month
UNION ALL
SELECT SUM(count) count
, EventType
, month
FROM #circumvent_final
GROUP BY EventType
, month
结果如下:
因此,我正在尝试使用以下查询求和我的计数,按月分组:
SELECT SUM(ef.count) AS EngineStarts
, SUM(cf.count) AS Circumventions
FROM #engine_final ef
LEFT JOIN #circumvent_final cf ON ef.month = cf.month
但这是我遇到错误的时候。我想也许我已经达到了 INT 的极限,但我的数字只达到了 2.6 亿左右,所以不可能。我错过了什么?
解决方案
您的联接使行数相乘。您应该先在子查询中预先聚合,然后加入:
SELECT ef.month, ef.EngineStarts, cf.Circumventions
FROM (
SELECT month, SUM(count) EngineStarts
FROM #engine_final
GROUP BY month
) ef
LEFT JOIN (
SELECT month, SUM(cf.count) AS Circumventions
FROM #circumvent_final
GROUP BY month
) cf ON ef.month = cf.month
我不确定您是否需要where
子查询中的子句来过滤eventType
- 如果需要,您可以轻松添加它们。
如果您有几个月cf
不在ef
其中,反之亦然,您可能需要考虑 aFULL JOIN
而不是 a LEFT JOIN
:
SELECT
COALESCE(ef.month, cf.month) month,
COALESCE(ef.EngineStarts, 0) EngineStarts,
COALESCE(cf.Circumventions, 0) Circumventions
FROM (
SELECT month, SUM(count) EngineStarts
FROM #engine_final
GROUP BY month
) ef
FULL JOIN (
SELECT month, SUM(cf.count) AS Circumventions
FROM #circumvent_final
GROUP BY month
) cf ON ef.month = cf.month
推荐阅读
- python - 我想使用 django 将图像保存在文件夹中,但出现此错误
- ionic-framework - Ionic 3 浏览器 (PWA) 平台是否有任何社交分享插件
- awk - 如何使用awk根据ID文件提取fasta序列数据
- laravel - 调用未定义的方法 App\Product::getProductStock()
- python - 保护python中正则表达式中的一个特定案例
- javascript - 为什么组件不能由自定义受保护的反应路由器呈现?
- python - Jupyter Notebook 未打开(ImportError:DLL 加载失败)
- google-sheets - ARRAYFORMULA 中仅针对过去日期的分组平均值
- android - 如何在屏幕底部添加取消问题
- javascript - Rails 5:用阅读更多和隐藏链接截断一些