当前位置: 首页 > 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.lryc.cn/news/619057.html

相关文章:

  • 杰里平台7083G 如何支持4M flash
  • 【K8s】K8s控制器——复制集和deployment
  • 【SpringBoot】08 容器功能 - SpringBoot底层注解汇总大全
  • 4.运算符
  • [激光原理与应用-254]:理论 - 几何光学 - 自动对焦在激光器中的应用?
  • vivo Pulsar 万亿级消息处理实践(2)-从0到1建设 Pulsar 指标监控链路
  • 【微服务过度拆分的问题】
  • web服务器tomcat内部工作原理以及样例代码
  • Airtable 入门指南:从创建项目到基础数据分析与可视化
  • C++中类之间的关系详解
  • LangChain 入门学习
  • 【限时分享:Hadoop+Spark+Vue技术栈电信客服数据分析系统完整实现方案
  • Docker概述与安装Dockerfile文件
  • Docker使用----(安装_Windows版)
  • 第二章:核心数据结构与面向对象思想之接口的奥秘
  • 3 Abp 核心框架(Core Framework)
  • Milvus 结合极客天成 NVFile 与 NVMatrix 实现高性能向量存储
  • LDAP 登录配置参数填写指南
  • 【VB.NET快乐数】2022-10-17
  • (树形 dp、数学)AT_dp_v Subtree 题解
  • 5年保留期+4次补考机会,灵活通关的申研机制
  • 【CV 目标检测】②——NMS(非极大值抑制)
  • git+lfs 如何安装
  • 股票智能体系统的设计与开发
  • Vue3 组合式API vs 选项式API:深度对比与最佳实践
  • SQL连接操作全解析:从入门到精通
  • 自动驾驶决策算法 —— 有限状态机 FSM
  • 基于SpringBoot的旅游网站系统
  • Jenkins + SonarQube 从原理到实战三:SonarQube 打通 Windows AD(LDAP)认证与踩坑记录
  • Linux内核进程管理子系统有什么第二十六回 —— 进程主结构详解(22)