当前位置: 首页 > news >正文

SQL 合并两个时间段的销售数据:FULL OUTER JOIN + COALESCE

FULL OUTER JOIN 基础

FULL OUTER JOIN(全外连接)是SQL中一种连接操作,它会返回两个表中所有记录:

  • 匹配的记录(两个表都有的数据)

  • 左表独有的记录(右表对应部分为NULL)

  • 右表独有的记录(左表对应部分为NULL)


MySQL中的实现方式

MySQL本身不支持FULL OUTER JOIN语法,但可以通过以下方式模拟:

left  join  + union (去除重复数据) + right  join 

​场景​​: 合并两个时间段的销售数据

SELECTCOALESCE(a.date, b.date) AS date,COALESCE(a.product_id, b.product_id) AS product_id,COALESCE(a.product_name, b.product_name) AS product_name,COALESCE(a.sales_quantity, 0) AS period1_sales,COALESCE(b.sales_quantity, 0) AS period2_sales,COALESCE(b.sales_quantity, 0) - COALESCE(a.sales_quantity, 0) AS sales_difference
FROM sales_period1 a
LEFT JOIN sales_period2 b ON a.date = b.date AND a.product_id = b.product_id
UNION
SELECTCOALESCE(a.date, b.date),COALESCE(a.product_id, b.product_id),COALESCE(a.product_name, b.product_name),COALESCE(a.sales_quantity, 0),COALESCE(b.sales_quantity, 0),COALESCE(b.sales_quantity, 0) - COALESCE(a.sales_quantity, 0)
FROM sales_period1 a
RIGHT JOIN sales_period2 b ON a.date = b.date AND a.product_id = b.product_id
WHERE a.date IS NULL  -- 只取右表独有的数据
ORDER BY date, product_id;

​思路​​:

  • MySQL 无原生 FULL OUTER JOIN,用 LEFT JOIN + UNION + RIGHT JOIN 模拟。
  • COALESCE 填充缺失值为 0 或默认值。

​建表示例​​:

CREATE TABLE sales_period1 (date DATE,product_id INT,product_name VARCHAR(50),sales_quantity INT,PRIMARY KEY (date, product_id)
);CREATE TABLE sales_period2 (date DATE,product_id INT,product_name VARCHAR(50),sales_quantity INT,PRIMARY KEY (date, product_id)
);INSERT INTO sales_period1 (date, product_id, product_name, sales_quantity) VALUES
('2023-01-01', 1, 'Laptop', 10),
('2023-01-02', 2, 'Smartphone', 20);INSERT INTO sales_period2 (date, product_id, product_name, sales_quantity) VALUES
('2023-01-01', 1, 'Laptop', 15),
('2023-01-03', 3, 'Headphones', 5);

http://www.xdnf.cn/news/1290205.html

相关文章:

  • 测试环境下因网络环境变化导致集群无法正常使用解决办法
  • SQL注入学习笔记
  • LeetCode Day5 -- 栈、队列、堆
  • 前后端分离项目中Spring MVC的请求执行流程
  • 肖臻《区块链技术与应用》第十讲:深入解析硬分叉与软分叉
  • 用 Spring 思维快速上手 DDD——以 Kratos 为例的分层解读
  • provide()函数和inject()函数
  • 数据结构:后缀表达式:结合性 (Associativity) 与一元运算符 (Unary Operators)
  • ZKmall开源商城的容灾之道:多地域部署与故障切换如何守护电商系统
  • 21.Linux HTTPS服务
  • 【GESP】C++一级知识点之【集成开发环境】
  • 备战国赛算法讲解——马尔科夫链,2025国赛数学建模B题详细思路模型更新
  • UE5.3 C++ 动态多播实战总结
  • SQL 生成日期与产品的所有组合:CROSS JOIN(笛卡尔积)
  • JVM宝典
  • 每日五个pyecharts可视化图表-line:从入门到精通 (4)
  • 什么时候用WS(WebSocket),什么使用用SSE(Server-Sent Events)?
  • Pytest项目_day13(usefixture方法、params、ids)
  • 机器学习处理文本数据
  • linux 开机进入initramfs无法开机
  • 串口通信学习
  • 数据分析专栏记录之 -基础数学与统计知识
  • Spring-Cache 缓存数据
  • windows git安装步骤
  • XGBoost 的适用场景以及与 CNN、LSTM 的区别
  • 网络协议——HTTP协议
  • Linux服务:Apache 虚拟主机配置指南:多站点部署三种方式详解
  • 【超详细!题解|两种做法】洛谷P3196 [HNOI2008] 神奇的国度[MCS算法]
  • 深入剖析 React 合成事件:透过 onClick 看本质
  • 过程设计工具深度解析-软件工程之详细设计(补充篇)