Union和union导致的数据不一致

平时工作中经常用到union,可以自带去重的操作,今天有个汇总的SQL也用了这个,需求是统计多张表的余额字段,看着就很简单union再sum或者sum再union。
第一种每张表先汇总,使用 UNION ALL 合并后最外层再汇总
SELECT SUM(total_sum) AS grand_total
FROM (
SELECT SUM(column_name) AS total_sum
FROM table1
UNION
SELECT SUM(column_name) AS total_sum
FROM table2
UNION
SELECT SUM(column_name) AS total_sum
FROM table3
) subquery;

第二种每张表不汇总,最外层统一汇总
SELECT SUM(total_sum) AS grand_total
FROM (
SELECT column_name AS total_sum
FROM table1
UNION
SELECT column_name AS total_sum
FROM table2
UNION
SELECT column_name AS total_sum
FROM table3
) subquery;

但是两种结果并不一样,换个表两种方法的结果又一样了,且数据量大的情况下不一样,少的时候一样,当时还看了好久,怀疑是不是空值导致的,加上相同条件限制排查未发现问题,还是同事帮看到了union 不是union all 的原因。数据量少的情况下数据没有重复,金额四位小数重复,当数据量大的情况下会出现很多一模一样的金额,这时候区别就出来了。union 把一样的金额去重,只剩下部分数据,而union all完全保留结果会是全部的,就统计数据而言应该用union all。

既然数据的问题解决了,还引发个新的疑惑,两者都用union的情况下,哪个效率会高一点,应该用哪个SQL,数据处理顺序有什么差异。这里记录一下个人看法。
在比较方法一和方法二的效率时,一般来说,方法二更可能是更高效的选择。

方法一的优点:

  • 减少数据传输量:在每张表内部进行 SUM 可以减少需要传输的数据量,因为只传输每张表的汇总值。
  • 减少最外层聚合计算:最外层只需要对少量的汇总结果进行 SUM,而不是对整个数据集进行聚合计算。

方法一的缺点:

  • 多次聚合计算:需要在每张表内部进行 SUM,可能会导致多次聚合计算,特别是当数据量很大时,这可能会影响性能。

方法二的优点:

  • 单一聚合计算:只需要在最外层对合并后的数据进行一次 SUM,减少了多次聚合计算的开销。
  • 简单:逻辑相对简单,不需要在每张表内部进行额外的聚合计算。

方法二的缺点:

  • 传输整个数据集:需要传输所有数据到最外层进行汇总,可能会导致数据传输量较大。

总体而言,方法二可能更高效,特别是在数据量较小或者需要简单逻辑的情况下。但是在涉及大数据量和需要减少数据传输量的情况下,方法一可能更有效。最佳选择取决于具体情况和需求。在实际应用中,可以根据数据量大小、性能要求等因素进行测试和选择最合适的方法。

除此之外可查看SQL对应的执行计划分析两者的区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/743556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CSP试题回顾】201803-1-跳一跳

CSP-201803-1-跳一跳 解题代码 #include <iostream> using namespace std;int score, s, last_s -1;int main() {while (true){cin >> s;if (s 0) break;else if (s 1) {score s;last_s s;}else if (s 2) {if (last_s>2){score last_s;last_s 2;}else…

Python 界面逻辑分离示例

本示例使用的发卡设备&#xff1a;https://item.taobao.com/item.htm?id615391857885&spma1z10.5-c.w4002-21818769070.11.6cc85700Robi3x 一、Python 安装PyQt5&#xff0c;运行 Qt Designer 新建窗体文件&#xff0c;在窗体中拖放控件 完成界面设计&#xff0c;保存为…

克隆图00

题目链接 克隆图 题目描述 注意点 节点数不超过100每个节点值 Node.val 都是唯一的&#xff0c;1 < Node.val < 100无向图是一个简单图&#xff0c;这意味着图中没有重复的边&#xff0c;也没有自环图是连通图&#xff0c;可以从给定节点访问到所有节点 解答思路 本…

活动图高阶讲解-03

1 00:00:00,000 --> 00:00:06,260 刚才我们讲了活动图的历史 2 00:00:06,260 --> 00:00:11,460 那我们来看这个活动图 3 00:00:11,460 --> 00:00:15,260 如果用来建模的话怎么用 4 00:00:15,260 --> 00:00:20,100 按照我们前面讲的软件方法的工作流 5 00:00:20…

【网络安全】手机不幸被远程监控,该如何破解,如何预防?

手机如果不幸被远程监控了&#xff0c;用三招就可以轻松破解&#xff0c;再用三招可以防范于未然。 三招可破解可解除手机被远程监控 1、恢复出厂设置 这一招是手机解决软件故障和系统故障的终极大招。只要点了恢复出厂设置&#xff0c;你手机里后装的各种APP全部将灰飞烟灭…

STM32中断和外部中断

NVIC&#xff1a;嵌套中断向量控制器&#xff1a;用于统一分配中断优先级和管理中断 响应式优先级&#xff1a;也可以称为插队式优先级哪个优先级高优先处理哪个 抢占式优先级&#xff1a;优先级高的可以优先被处理&#xff0c;相当于CPU可以暂时中断当前处理的程序&#xff0c…

深入理解对话框管理器:自定义 TAB 按键行为

有人想开发这样一个功能,说界面上有一个多行文本编辑框,他希望用户按下 TAB 按键后可以将输入焦点导航至其他控件,而不是在文本框里默认地输入一个 TAB 字符。 如果是你,你觉得应该怎样做呢? 他琢磨了一下,觉得应该使用子类化的方式来实现这项功能,代码如下: >&g…

报文解析模块模型

一、引言 报文解析模块是信息系统中关键的一环&#xff0c;它负责接收、验证、解码、提取、处理报文数据&#xff0c;并输出结果。一个高效且稳定的报文解析模块对于确保数据传输的准确性、及时性以及系统的可靠性至关重要。本文档将详细介绍报文解析模块的主要组成部分及其功…

opencv install

安装 opencv 版本为 4.2 一、前置条件 1. gcc安装 yum install gcc2. 安装cmake 注意安装 opencv-4.2 版本&#xff0c;需要 cmake-3.5.1 及其以上&#xff0c;安装脚本如下&#xff1a; #!/bin/bash# 设置下载和安装目录 DOWNLOAD_DIR"/tmp/cmake_download" IN…

提升大模型解释性:新型解释性方法的研究与实践

提升大模型解释性&#xff1a;新型解释性方法的研究与实践 摘要&#xff1a; 随着深度学习技术的快速发展&#xff0c;大模型在各个领域取得了显著成果。然而&#xff0c;这些模型往往缺乏解释性&#xff0c;导致其决策过程难以理解。本文旨在探讨新型解释性方法的研究与实践…

Python算法(列表排序)

一。冒泡排序&#xff1a; 列表每两个相邻的数&#xff0c;如果前面比后面大&#xff0c;则交换这两个数 一趟排序完成后&#xff0c;则无序区减少一个数&#xff0c;有序区增加一个数 时间复杂度&#xff1a;O(n*n) 优化后&#xff1a;已经排序好后立马停止&#xff0c;加快…

【力扣 - 合并区间】

题目描述 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [start_i, end_i] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;int…

Github 2024-03-14 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-03-14统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4Rust项目2Go项目2TypeScript项目2非开发语言项目1C++项目1免费API集合 创建周期:2900 天开发语言:Python协议类型:MIT LicenseSt…

环形缓冲区在stm32上的使用

目录 环形缓冲区在stm32上的使用前言实验目的环形缓冲区的定义和初始化写入数据到环形缓冲区从环形缓冲区读取数据实验结果本文中的实践工程 环形缓冲区在stm32上的使用 本文目标&#xff1a;环形缓冲区在stm32上的使用 按照本文的描述&#xff0c;应该可以跑通实验并举一反三…

Day31:安全开发-JS应用WebPack打包器第三方库JQuery安装使用安全检测

目录 打包器-WebPack-使用&安全 第三方库-JQuery-使用&安全 思维导图 JS知识点&#xff1a; 功能&#xff1a;登录验证&#xff0c;文件操作&#xff0c;SQL操作&#xff0c;云应用接入&#xff0c;框架开发&#xff0c;打包器使用等 技术&#xff1a;原生开发&…

uniapp写支付的操作

支付的时候一般需要几个参数&#xff1a; ‘timeStamp’: 时间戳,‘nonceStr’: 随机字符串&#xff0c;不超过32位‘package’: 下单后接口返回的prepauid‘signType’: 签名的算法‘paySign’: 后端会给前端一个签名sign: data.sign // 根据签名算法生成签名 <template&…

并发支持库(4)-条件变量

条件变量允许多个线程之间的交流。它可以阻塞某个线程&#xff0c;直到另一个线程的提醒再继续&#xff0c;这是通过关联一个互斥体来实现的。 本文章的代码库&#xff1a; https://gitee.com/gamestorm577/CppStd condition_variable condition_variable是和mutex一起使用…

使用Nginx进行负载均衡

什么是负载均衡 Nginx是一个高性能的开源反向代理服务器&#xff0c;也可以用作负载均衡器。通过Nginx的负载均衡功能&#xff0c;可以将流量分发到多台后端服务器上&#xff0c;实现负载均衡&#xff0c;提高系统的性能、可用性和稳定性。 如下图所示&#xff1a; Nginx负…

HDOJ 2036

改革春风吹满地 Problem Description “ 改革春风吹满地, 不会AC没关系; 实在不行回老家&#xff0c; 还有一亩三分地。 谢谢!&#xff08;乐队奏乐&#xff09;” 话说部分学生心态极好&#xff0c;每天就知道游戏&#xff0c;这次考试如此简单的题目&#xff0c;也是云里雾…

如何注册Devin-首个全自主AI软件工程师

最近devin大火&#xff0c;具体的就不说了&#xff0c;大家应该都知道&#xff0c;写代码非常nb&#xff0c;这里说一下devin的注册方式&#xff0c;目前devin的内测已经开启。 官网https://www.cognition-labs.com/blog注册网址Your reliable AI software engineerhttps://pr…