【SQL】1321. 餐馆营业额变化增长(自连接;窗口函数rows between 、range between)

前述

窗口函数相关知识推荐阅读:
通俗易懂的学会:SQL窗口函数
窗口函数rows between 、range between的使用
MySQL中的DATEDIFF()函数
mysql data类型的加减

常用函数:

  • ROUND() 函数:用于将数值四舍五入到指定的小数位数。
  • FLOOR() 函数:用于将数值向下取整,去掉小数部分,保留整数部分。
  • CEIL() 或 CEILING() 函数:用于将数值向上取整,进位到最接近的整数。

题目描述

leetcode 题目:1321. 餐馆营业额变化增长

在这里插入图片描述
在这里插入图片描述

思路

  1. 先按照日期分组
  2. 统计总额,平均额

写法一:自连接

思想:

  1. 先取出结果集中的所有visited_on字段,
  2. 再在其后连接其余字段并分组统计总额,平均额
select  B.visited_on, 
        sum(C.amount) as amount,
        round(sum(C.amount)/7, 2) as average_amount 
from (
    select distinct date_add(A.visited_on, interval 6 day) as visited_on
    from Customer A 
    where date_add(A.visited_on, interval 6 day) <= ( 
        select B.visited_on
        from Customer B
        order by B.visited_on desc
        limit 1
    )) B 
join Customer C 
on datediff(B.visited_on, C.visited_on) between 0 and 6
group by B.visited_on
order by B.visited_on

date_add(A.visited_on, interval 6 day) # 在A.visited_on的日期基础上,加上6天

解析:B表是为了得到结果集当中的visited_on字段的所有值
在这里插入图片描述

将B表连接其余字段:

在这里插入图片描述
最后再按照visited_on字段分组(group by B.cisited_on),并用聚合函数SUM()计算总额及平均额等。

写法二:自连接

select C.visited_on,
      sum(D.amount) as amount,
      round(sum(D.amount)/7, 2) as average_amount
from(
    select distinct A.visited_on  --  C 表为只取出结果集当中的visited_on字段的所有值
    from Customer A
    where A.visited_on >= (
        select min(B.visited_on)
        from Customer B
    ) + 6) C 
left join Customer D 
on datediff(C.visited_on, D.visited_on) between 0 and 6
group by C.visited_on
order by C.visited_on

写法三:窗口函数

学习题解中大佬的写法:整理两种主流的解决办法【自连接、窗口函数】,并部分改进

引用【窗口函数rows between 、range between的使用】的总结:

rows between 控制窗口函数的范围,使用rows between可以根据自己的需求任意的控制窗口函数的范围

  • UNBOUNDED :不受控的,无限的;
  • PRECEDING : 在…之前;
  • FOLLOWING: 在…之后;
select distinct visited_on,
       sum_amount as amount, 
       round(sum_amount/7, 2) as average_amount
from (
    select visited_on, sum(amount) over(order by visited_on range interval 6 day preceding) as sum_amount
    from Customer) t
-- 最后手动地从第7天开始
where datediff(visited_on, (select MIN(visited_on) from Customer)) >= 6

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux网络命令系列】ping curl telnet三剑客

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

HADOOP HDFS详解

目录 第一章 概述 1.1大数据的特征(4V) 1.2 大数据的应用场景 1.3大数据的发展前景 1.4企业大数据的一般处理流程 1.4.1数据源 1.4.2数据采集或者同步 1.4.3数据存储 1.4.4 数据清洗 1.4.5 数据分析 1.4.6数据展示 第二章 hadoop介绍 2.1.hadoop 目标 2.2 hadoop的…

07OpenCV 图像模糊

文章目录 图像掩膜操作模糊原理均值滤波高斯滤波中值滤波双边滤波算子代码 图像掩膜操作 图像掩膜操作 模糊原理 Smooth/Blur是图像处理中最简单和常用的操作之一 使用操作的原因之一就是为了给图像预处理时候减低噪声 图像噪声是指存在于图像数据中的不必要的或多余的干扰信…

求Sn=a+aa+aaa+aaaa+aaaaa的前n项之和

求Snaaaaaaaaaaaaaaa的前5项之和&#xff0c;其中a是一个数字&#xff0c; 例如&#xff1a;222222222222222 int main() {int a;scanf("%d", &a);int n;scanf("%d", &n);int sum 0;int tmp 0;for (int i 0; i < n; i){tmp tmp * 10 a;sum…

JavaSec 基础之五大不安全组件

文章目录 不安全组件(框架)-Shiro&FastJson&Jackson&XStream&Log4jLog4jShiroJacksonFastJsonXStream 不安全组件(框架)-Shiro&FastJson&Jackson&XStream&Log4j Log4j Apache的一个开源项目&#xff0c;是一个基于Java的日志记录框架。 历史…

检查链表是否有环,返回值为bool和从头节点进入环的第一个节点两种情况

题目1&#xff08;不返回节点&#xff09; 给定单链表&#xff0c;检查链表是否有环。 代码实现&#xff1a; bool IsCircle(List plist) {assert(plist ! NULL);if (plist NULL||plist->nextNULL)return false;Node* p plist->next;//慢指针,一次走一步Node* q pl…

k8s 网络概念与策略控制

一、Kubernetes 基本网络模型 Kubernetes 的容器网络模型可以把它归结为约法三章和四大目标。 1、约法三章 约法三章确保了Kubernetes容器网络模型的基本特性&#xff1a; ① 任意两个 pod 之间可以直接通信&#xff1a;在Kubernetes中&#xff0c;每个 Pod 都被分配了一个…

Ankie聊AI:什么是人工智能?人工智能和普通程序的区别

什么是人工智能&#xff1f; 虽然AI历史很悠久&#xff0c;上个世纪50年代就有各种概念&#xff0c;但是发展很慢。第一次对人类的冲击就是1997年IBM深蓝击败国际象棋世界冠军&#xff0c;引起了人们的广泛关注&#xff0c;之后又销声匿迹。突然间2016人工智能alphaGO战胜了围…

【网站项目】154大学生创新创业平台竞赛管理子系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

货运搬家小程序的功能与解决方案

在繁忙的现代生活中&#xff0c;搬家不再是一件简单的事。从物品的整理、打包到运输、卸载&#xff0c;每一个环节都可能让您感到头疼。而一款优秀的货运搬家APP&#xff0c;正是您解决这些搬家难题的得力助手。 那么货运搬家APP需要具备哪些功能呢&#xff1f; 1.注册与登录&…

PyTorch-神经网络

神经网络&#xff0c;这也是深度学习的基石&#xff0c;所谓的深度学习&#xff0c;也可以理解为很深层的神经网络。说起这里&#xff0c;有一个小段子&#xff0c;神经网络曾经被打入了冷宫&#xff0c;因为SVM派的崛起&#xff0c;SVM不了解的同学可以去google一下&#xff0…

【搭建 Hbase 集群】

搭建 Hbase 集群 一、准备工作二、三台服务器之间的 SSH 免密登录1.修改hosts文件添加DNS映射2.在每台服务器上生成 SSH 密钥对3.将公共密钥&#xff08;通常为 ~/.ssh/id_rsa.pub&#xff09;复制到目标服务器上4.从本地使用 SSH 命令无需密码连接到目标服务器 二、安装JDK1.执…

STM32(9)EXTI

EXTI工作原理 EXTI的寄存器组 每个寄存器都是20个比特位&#xff0c;对应EXTI的20路通道&#xff0c;如这6个寄存器的最左边就都是对应通道1的

基于单片机的红外遥控解码程序设计与实现

摘要:该文介绍基于士兰半导体芯片(SC6122)的红外发射遥控器,通过单片机解码程序,实现红外遥控信号的解码和接收。红外接收头与单片机特定的引脚连接,通过设置单片机定时计数器,采样来自红外接收头的高、低电平宽度解码遥控信号。该解码程序设计主要应用在LED数码显示控制…

芯片的制造详解(1)——沙子到晶圆

哔哩哔哩视频 up:谈三圈&#xff08;2021/8月内容&#xff09; 芯片的制造流程、工艺、设备 面临困境&#xff1a; 国产芯片卡脖子的地方&#xff1a;制造芯片&#xff08;制造过程中的一系列设备和和材料&#xff09;包括但不限于&#xff1a;光刻机、光刻胶、薄膜沉积设备、…

springboot235基于SpringBoot的房屋交易平台的设计与实现

房屋交易平台设计与实现 摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互…

霍尔,磁编码器(AS5600 ,AS5048A)

霍尔编码器&#xff1a; STM32Cube HAL库——霍尔编码器测速&#xff08;电机转速测量&#xff09;-CSDN博客 霍尔编码器&#xff08;Hall Encoder&#xff09;是一种用于测量旋转位置和方向的传感器。它通过感应磁场变化来测量旋转轴的位置和方向。 霍尔编码器通常由霍尔传…

LeetCode-第14题-最长公共前缀

1.题目描述 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""。 2.样例描述 3.思路描述 按字符串数组每个数组的长度&#xff0c;将字符串数组从小到大排序&#xff1b;他们的公共前缀一定小于或等于最长元素长度…

框架漏洞-->Struts2 Docker_Vulnhub搭建

来浅浅的讲一下Struts2漏洞 目录 1.Docker_Vulnhub搭建 2.Struts2 3.Struts2的框架特征 4.S2-029-->Remote Code Execution 5.漏洞复现 1.RCE 2.Getshell 1.Docker_Vulnhub搭建 因为我用的是Linux&#xff0c;所以我选择直接搭个docker&#xff0c;这里我建议先换个…

2024最新算法:斑翠鸟优化算法(Pied Kingfisher Optimizer ,PKO)求解23个基准函数

一、斑翠鸟优化算法 斑翠鸟优化算法&#xff08;Pied Kingfisher Optimizer ,PKO&#xff09;&#xff0c;是由Abdelazim Hussien于2024年提出的一种基于群体的新型元启发式算法&#xff0c;它从自然界中观察到的斑翠鸟独特的狩猎行为和共生关系中汲取灵感。PKO 算法围绕三个不…