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

这篇具有很好参考价值的文章主要介绍了高逼格的 SQL 写法:行行比较。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

  • 环境准备

  • 需求背景

  • 循环查询

  • OR 拼接

  • 混查过滤

  • 行行比较

  • 总结

环境准备

数据库版本:MySQL 5.7.20-log

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

建表 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 条数据

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

需求背景

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

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

具体点,类似如下

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

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

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

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

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

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

循环查询

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

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

具体的 SQL 类似如下

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

SQL 能走索引

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

实现简单,也好理解,SQL 也能走索引,一切看起来似乎很完美文章来源地址https://www.toymoban.com/news/detail-474773.html

到了这里,关于高逼格的 SQL 写法:行行比较的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 码农的转型之路-偶遇大佬情况或有变

    元旦快乐,先回顾23年最后一篇帖子《 码农的转型之路-造轮子还继续吗? 》   感谢大家的热心建议,从最近几天的调研反馈来看,还是劝退者居多! “ 有质疑工具可行性的、有对商业模式提出问题的、有提出支招如何防盗版的,有些出谋划策怎么收费的”          这段

    2024年02月03日
    浏览(33)
  • 20多年老码农的IT学习之路

    20年IT工作经历,目前在一家500强做企业架构,年薪税前150万多.最近公司业绩不好,有感觉工作不保,所以又捡起了编程,开始学习Golang,Angular等。我不是985,211也不是海归,我出生在西部的一个小县城的农村,家里经济情况也不太好,上的大学是个二本,英语也不好,情

    2024年02月02日
    浏览(36)
  • 码农的转型之路-这款轮子可以造吗?

    从昨天发表的《码农的转型之路-多年以来的反思》收到了不少猿友的评论和关注,还有几个加了wx,给了很多正面的反馈。趁着热度还在:) 也有很多人不知道这个人要干嘛,索性今天正式介绍一下,但名字还没有想好,她应该是一款浏览器工具。 一、 什么 应用场景? 1.C/S开

    2024年02月04日
    浏览(30)
  • (字符串) 844. 比较含退格的字符串——【Leetcode每日一题】

    难度:简单 给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。 # 代表退格字符。 注意 :如果对空文本输入退格字符,文本继续为空。 示例 1: 输入:s = “ab#c”, t = “ad#c” 输出:true 解释:s 和 t 都会变成 “ac”。 示例 2: 输入

    2024年02月11日
    浏览(35)
  • Practices8(双指针)|925. 长按键入、844. 比较含退格的字符串

    1.题目: 你的朋友正在使用键盘输入他的名字  name 。偶尔,在键入字符  c  时,按键可能会被 长按 ,而字符可能被输入 1 次或多次。 你将会检查键盘输入的字符  typed 。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回  True 。 示例 1: 示例

    2024年02月13日
    浏览(22)
  • Java JDK1.8 Lambda的多种用法,Lambda的多种写法,Lambda的多种写法比较

    说明:泛型String可以灵活,判断条件也是 以前的写法 使用lambda的写法 或1 或2 以前的写法 使用lambda的写法 或对象 删除 .reversed() 为正序 以前的写法 使用lambda的写法 或 以前的写法 使用lambda的写法 以前的写法 使用lambda的写法 以前的写法 使用lambda的写法 或 以前的写法 lamb

    2024年02月15日
    浏览(44)
  • 算法50:动态规划专练(力扣514题:自由之路-----4种写法)

    题目: 力扣514 : 自由之路  . - 力扣(LeetCode) 题目的详细描述,直接打开力扣看就是了,下面说一下我对题目的理解: 事例1: 1. ring的第一个字符默认是指向12点方向的,这一点很重要 2. key的第一个字符为g,而ring中首字符和末尾字符都为g。因此,必然存在选择首字符的g还

    2024年04月15日
    浏览(24)
  • kuiper 规则sql写法

    创建规则对接收到的报文数据进行业务过滤,报文有各种结构的,下面对各种结构报文sql过滤使用进行说明 下面sql规则统一对temperature大于20的数据进行过滤 1:单层结构报文 sql写法如下 2:双层结构报文 sql写法如下 3:多层数组类型报文结构 sql写法如下

    2024年02月09日
    浏览(29)
  • 几个SQL的高级写法

    MySql 中的排序 ORDER BY 除了可以用 ASC 和 DESC ,还可以通过  ORDER BY FIELD(str,str1,...)   自定义字符串/数字来实现排序。这里用 order_diy 表举例,结构以及表数据展示:  ORDER BY FIELD(str,str1,...) 自定义排序sql如下: 查询结果如下:  如上,我们设置自定义排序字段为 title 字段,然

    2024年02月09日
    浏览(24)
  • SQL 循环语句几种写法

    1、if语句使用示例 1 2 3 4 5 6 7 8 9 10 declare   @a  int set   @a=12 if @a100 begin    print @a end else begin    print  \\\'no\\\' end 2、while语句使用示例 1 2 3 4 5 6 7 8 declare   @i  int set   @i=1 while @i30 begin    insert   into   test (userid)  values (@i) set   @i=@i+1 end -- 设置重复执行 SQL 语句或语句块的条件。

    2024年02月13日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包