高逼格的 SQL 写法:行行比较

news2025/2/25 6:35:38

码农code之路 2023-06-01 08:28 发表于天津

  • 环境准备

  • 需求背景

  • 循环查询

  • OR 拼接

  • 混查过滤

  • 行行比较

  • 总结

环境准备

数据库版本:MySQL 5.7.20-log

建表 SQL

DROP TABLE IF EXISTS `t_ware_sale_statistics`;
CREATE TABLE `t_ware_sale_statistics` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `business_id` bigint(20) NOT NULL COMMENT '业务机构编码',
  `ware_inside_code` bigint(20) NOT NULL COMMENT '商品自编码',
  `weight_sale_cnt_day` double(16,4) DEFAULT NULL COMMENT '平均日销量',
  `last_thirty_days_sales` double(16,4) DEFAULT NULL COMMENT '最近30天销量',
  `last_sixty_days_sales` double(16,4) DEFAULT NULL COMMENT '最近60天销量',
  `last_ninety_days_sales` double(16,4) DEFAULT NULL COMMENT '最近90天销量',
  `same_period_sale_qty_thirty` double(16,4) DEFAULT NULL COMMENT '去年同期30天销量',
  `same_period_sale_qty_sixty` double(16,4) DEFAULT NULL COMMENT '去年同期60天销量',
  `same_period_sale_qty_ninety` double(16,4) DEFAULT NULL COMMENT '去年同期90天销量',
  `create_user` bigint(20) DEFAULT NULL COMMENT '创建人',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `modify_user` bigint(20) DEFAULT NULL COMMENT '最终修改人',
  `modify_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最终修改时间',
  `is_delete` tinyint(2) DEFAULT '2' COMMENT '是否删除,1:是,2:否',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_business_ware` (`business_id`,`ware_inside_code`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='商品销售统计';

初始化数据

准备了 769063 条数据

需求背景

业务机构下销售商品,同个业务机构可以销售不同的商品,同个商品可以在不同的业务机构销售,也就说:业务机构与商品是多对多的关系

假设现在有 n 个机构,每个机构下有几个商品,如何查询出这几个门店下各自商品的销售情况?

具体点,类似如下

如何查出 100001 下商品 1000、1001、1003 、 100002 下商品 1003、1004 、 100003 下商品 1006、1008、1009 的销售情况

相当于是双层列表(业务机构列表中套商品列表)的查询;业务机构列表和商品列表都不是固定的,而是动态的

是双层列表(业务机构列表中套商品列表)的查询;业务机构列表和商品列表都不是固定的,而是动态的

那么问题就是:如何查询多个业务机构下,某些商品的销售情况

问题经我一描述,可能更模糊了,大家明白意思了就好!

循环查询

这个很容易想到,在代码层面循环业务机构列表,每个业务机构查一次数据库,伪代码如下:

具体的 SQL 类似如下

SQL 能走索引

实现简单,也好理解,SQL 也能走索引,一切看起来似乎很完美

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

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

相关文章

面向过程 VS 面向对象

学习编程, 基本功是掌握编程语言,但编程的本质是逻辑,所以编程思维的培养也很重要。面向过程和面向对象是两种重要的编程思想,下面讲述一下这两者的区别和优缺点比较。 1. 面向过程 面向过程是一种以事件为中心的编程思想&#…

cmake编译报错

CMake Error :The source.. 此处大概意思是一个文件地址does not match the 另外一个文件地址so used to generate cache. Rerun cmake...解决方法: vscode 快捷键ctrl shift P ,点击第一行的删除cmake 缓存 或者将 build 下的 CMakeCac…

算法百花齐放:探索常见算法的精妙之道

在计算机科学的领域中,算法是一项关键而令人着迷的技术。它们是解决问题、优化效率以及创造智能系统的核心。从简单的排序和搜索任务到复杂的机器学习和深度学习应用,常见算法为我们提供了解决各种挑战的有力工具。在本篇博客中,我们将探索常…

chatgpt赋能python:Python如何过滤某个字母——关于SEO的建议

Python如何过滤某个字母——关于SEO的建议 SEO(搜索引擎优化)是现代网络营销中的一个重要概念。为了让自己的网站在搜索引擎排名中更加靠前,许多管理员和开发人员都在使用Python等编程语言来过滤特定的字母或符号,以优化关键词的…

linux服务器更新yum源,安装 dnf包管理器

进入yum目录 cd /etc/yum.repos.dls 查看 备份 将“CentOS-Base.repo”重命名备份为“CentOS-Base.repo.backup” mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup下载yum源并查看 下载对应版本 repo 文件, 放入 /etc/yum.repos.d/ (操作前请…

MAC 安装配置Tomcat

一、安装Tomcat 1、首先到官网下载Tomcat:https://tomcat.apache.org/download-80.cgi 2、解压tomcat文件,可以通过快捷键(commandshiftG)把它放入/Library(资源库中) 二、用终端打开Tomcat 1.在Bin目录下 打开终端 2.授权bin目录下的所有操作:终端…

Gradle Kotlin 规范插件用于模块化结构 - 共享构建逻辑

Gradle Kotlin 规范插件用于模块化结构 - 共享构建逻辑 我们中的许多人都遇到过Groovy的困难,并习惯于将其转换为Kotlin DSL。 然后,作为Android工程师,在完全使用Kotlin编写的项目上工作是纯粹的喜悦。 我们假设采用基于功能的模块化应用程…

PLSQL Developer 14安装

资源 百度网盘: 链接:https://pan.baidu.com/s/1A4DeaKPF7y-0o90nVKFbZA?pwd6udw 提取码:6udw阿里网盘: PLSQL Developer 14破解版 https://www.aliyundrive.com/s/zUdgF98VCE3安装步骤 解压安装包后,获得PLSQL De…

chatgpt赋能python:Python如何访问网页

Python如何访问网页 Python是一种被广泛用于web开发、数据科学和人工智能的编程语言。但是,你知道Python还可以用于访问网页吗?在本文中,我们将介绍Python如何访问网页,帮助您了解Python的这一方面,并掌握它的实际应用…

什么是快捷支付?

快捷支付是一种便捷的支付方式,它允许用户使用预先绑定的银行卡或支付账户进行快速支付,无需重复输入卡号、密码等详细信息。 编辑搜图 请点击输入图片描述(最多18字) 在快捷支付中,用户可以在商家网站、移动应用或支…

详解YOLOv6.2 Repvgg-style 的高效backbone:EfficientRep

论文地址: https://arxiv.org/pdf/2302.00386v1.pdf github: https://github.com/meituan/YOLOv6/releases I. 引言 自从VGG在图像分类任务中取得成功以来,卷积神经网络设计已经引起了学术界和工业界的广泛关注。目前已经提出了大量经典网络,如Inception和Resnet等。这些精心…

【论文阅读笔记】Fast Bilateral Filtering for the Display of High-Dynamic-Range Images

论文地址:https://people.csail.mit.edu/fredo/PUBLI/Siggraph2002/DurandBilateral.pdf 论文小结 本文提出方法的目标是压缩高动态范围图像,使其能够用于显示。它可以在保留细节的同时降低对比度。   基本原理是将图像分为两个尺度:编码大…

软考知识总结

文章目录 一、计算机系统知识2. 总线包括:数据总线,地址总线,控制总线3. 原码 反码 补码 移码的转换4.计算机指令-流水线和吞吐率5. 漏洞扫描系统基本概念6.CISC和RISC7.[海明码计算](https://blog.csdn.net/alzzw/article/details/123402876…

MVCC在Mysql中的运用

MVCC到底是个啥? 定义: 多版本并发控制,字面理解,在并发过程中利用多个版本进行合理控制(反正我就是从字面这么理解),很明显,这个东西是个抽象的概念,事实也是如此。它主要是出现在…

OpenStack部署(二)

OpenStack部署 4. Glance4.1 创建Glance数据库并授权4.2 获得admin凭证4.3 创建glance用户并设置密码4.4 添加 admin 角色到 glance 用户和 service 项目上4.5 创建glance服务实体4.6 创建镜像服务的 API 端点4.7 yum安装Glance服务4.8 初始化镜像服务的数据库4.9 启动镜像服务…

中企出海,数智人力重构企智人效的人才供应体系

本文来自深度围观 中企出海一直是热度话题,综合来看,中企出海除了市场拓展、国际化战略、多元投资的因素之外,还有非常重要的一点是,全球供应链和资源整合。用友网络副总裁张月强总结为:“在产品国际化、区域经营国际…

在探索嵌入式系统世界的道路上选择51单片机

当我是一个初学者时,我发现选择51单片机是一个绝佳的决定。我发现51单片机基于Intel 8051架构,非常适合学习和教育领域的应用。刚好,我总结了一些嵌入式资料放在视频结尾。以下是为什么我认为51单片机是初学者的理想选择的一些原因&#xff1…

直播预告 | 在能媲美“真假美猴王”的AI面前,如何保持我们的“火眼金睛”

AI欺诈防护——业务安全大讲堂第二季第六期-CSDN直播https://live.csdn.net/room/dingxiangtech/7P3ME1HJ AI造谣层出不穷,险些引发社会恐慌 “2021年4月,上海某公司高管因对方使用AI换脸与人工生成的语音技术制作公司领导的面孔,并要该高管…

chatgpt赋能python:Python如何优化SEO?

Python如何优化SEO? Python已经成为一种非常流行的编程语言。专业人士使用Python编写众多应用程序,将其应用于各种行业和领域。众所周知,搜索引擎是市场营销的重要组成部分。SEO是在网站和搜索引擎结果页面上提高网站排名的过程。在这个过程…

ChatGPT时代:ChatGPT全能应用一本通

摘要 ChatGPT是一款开创性的人工智能语言模型,将人类语言理解和生成的能力推向了新的高度。作为一个全能的应用,ChatGPT能够在各个领域提供帮助和指导,从教育到医疗,从娱乐到商业。本文将探讨ChatGPT时代的到来,以及其…