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

力扣高频SQL 50题(基础版)第四十七题之1321.餐馆营业额变化增长

力扣高频SQL 50题(基础版)第四十七题

1321.餐馆营业额变化增长

题目说明

表: Customer

±--------------±--------+

| Column Name | Type |

±--------------±--------+

| customer_id | int |

| name | varchar |

| visited_on | date |

| amount | int |

±--------------±--------+

在 SQL 中,(customer_id, visited_on) 是该表的主键。

该表包含一家餐馆的顾客交易数据。

visited_on 表示 (customer_id) 的顾客在 visited_on 那天访问了餐馆。

amount 是一个顾客某一天的消费总额。

你是餐馆的老板,现在你想分析一下可能的营业额变化增长(每天至少有一位顾客)。

计算以 7 天(某日期 + 该日期前的 6 天)为一个时间段的顾客消费平均值。average_amount保留两位小数。

结果按 visited_on 升序排序

实现过程

准备数据

Create table If Not Exists Customer (customer_id int, name varchar(20), visited_on date, amount int)
Truncate table Customer
insert into Customer (customer_id, name, visited_on, amount) values ('1', 'Jhon', '2019-01-01', '100')
insert into Customer (customer_id, name, visited_on, amount) values ('2', 'Daniel', '2019-01-02', '110')
insert into Customer (customer_id, name, visited_on, amount) values ('3', 'Jade', '2019-01-03', '120')
insert into Customer (customer_id, name, visited_on, amount) values ('4', 'Khaled', '2019-01-04', '130')
insert into Customer (customer_id, name, visited_on, amount) values ('5', 'Winston', '2019-01-05', '110')
insert into Customer (customer_id, name, visited_on, amount) values ('6', 'Elvis', '2019-01-06', '140')
insert into Customer (customer_id, name, visited_on, amount) values ('7', 'Anna', '2019-01-07', '150')
insert into Customer (customer_id, name, visited_on, amount) values ('8', 'Maria', '2019-01-08', '80')
insert into Customer (customer_id, name, visited_on, amount) values ('9', 'Jaze', '2019-01-09', '110')
insert into Customer (customer_id, name, visited_on, amount) values ('1', 'Jhon', '2019-01-10', '130')
insert into Customer (customer_id, name, visited_on, amount) values ('3', 'Jade', '2019-01-10', '150')

实现方式

with t1 as (select distinct  # 因为窗口函数是按照日期计算的。所以相同日期的结果也是相同的,直接去重即可visited_on,sum(amount) over(order by visited_on range interval 6 day preceding) amount, # 按照日期排序,范围是当前日期和当前日期的前六天round(sum(amount) over(order by visited_on range interval 6 day preceding)/7, 2) average_amountfrom Customer)
select visited_on,amount,average_amount
from t1
where datediff(visited_on,(select min(visited_on) from Customer))>=6 #去除日期不足7日的结果
order by visited_on;

结果截图

在这里插入图片描述

http://www.lryc.cn/news/426153.html

相关文章:

  • django中的MESSAGE组件
  • 【JavaSE】解读Java中的toString方法
  • 软件工程的核心原则:KISS, DRY, SOLID, YAGNI
  • Android 高通7.1系开机动画自动跟随系统方向旋转
  • Sentinel入门与进阶:微服务流量控制的最佳实践 ( 三 )
  • 2021年上半年网络工程师考试上午真题
  • SQL触发器的级联魔力:数据完整性的守护者
  • ARCGIS PRO 要素标注背景色透明度的设置
  • 探讨MySQL中 “约束“ 下的查询
  • Nuxt3【布局】layouts 详解
  • 获取数据源(多种方式爬虫介绍)
  • Linux下FTP服务器搭建配置:vsftpd的安装与配置实验
  • 使用Java调用Apache commons-text求解字符串相似性实战
  • http request-01-XMLHttpRequest XHR 简单介绍
  • 关于tresos Studio(EB)的MCAL配置之DIO
  • 【漫谈C语言和嵌入式003】1394总线
  • python爬虫爬取某图书网页实例
  • Linux 用户管理的基本概念、常用工具及操作流程
  • 手撕C++入门基础
  • NPM版本控制策略:实现版本候选行为的指南
  • 问题集锦6
  • 【研发日记】嵌入式处理器技能解锁(四)——TI C2000 DSP的Memory
  • Ubuntu离线安装docker
  • 【抓耳挠腮,还是升职加薪,一起来画架构图!】
  • 算法的学习笔记—合并两个排序的链表(牛客JZ25)
  • 《虚拟之旅:开启无限可能的机器世界》简介:
  • centos7 服务器搭建
  • 【Godot4自学手册】第四十五节用着色器(shader)制作水中效果
  • VMware Workstation Pro 安装 Ubuntu Server
  • 智能化包括自动化与非自动化