【力扣白嫖日记】1321.餐馆营业额变化增长

news/2024/7/7 19:50:33

前言

练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。

今日题目:

1321.餐馆营业额变化增长
表:Customer

列名类型
cutomer_idint
namevarchar
visited_ondate
amountint

在 SQL 中,(customer_id, visited_on) 是该表的主键。
该表包含一家餐馆的顾客交易数据。
visited_on 表示 (customer_id) 的顾客在 visited_on 那天访问了餐馆。
amount 是一个顾客某一天的消费总额。

你是餐馆的老板,现在你想分析一下可能的营业额变化增长(每天至少有一位顾客)。计算以 7 天(某日期 + 该日期前的 6 天)为一个时间段的顾客消费平均值。average_amount 要 保留两位小数。
结果按 visited_on 升序排序。


我那不值一提的想法:

  • 首先梳理表内容,题干一共给了一张客户表,记录了客户id,客户姓名访问日期,顾客一天的消费总额。
  • 其次分析需求,需要计算7天(某日期+该日期的前6天)为一个时间段顾客消费平均值
  • 我们首先求得间隔7天的时间组,将其设立为临时表
with tem_date as 
(
    select distinct c1.visited_on as end_date,c2.visited_on as start_date
    from Customer c1 , Customer c2
    where datediff(c1.visited_on,c2.visited_on) = 6
)
  • 然后用customer表左连接这个表,条件就是主表的日期在sart_date和end_date之间,这样就能得到对应的数据表的其他值。
select *
from Customer c 
left join tem_date t 
on c.visited_on between t.start_date and t.end_date
  • 最后由于是很多个时间组,组合在一起,同时只要是在一个时间组内,它们的开始日期和结束日期是相同的,我们将这些开始和结束日期进行分组求和,就能得到
    7天的总消费额
select t.end_date as visited_on,sum(c.amount) as amount,round(sum(c.amount) / 7,2) as average_amount
from Customer c 
left join tem_date t 
on c.visited_on between t.start_date and t.end_date
group by t.start_date,t.end_date
  • 完整代码
with tem_date as 
(
    select distinct c1.visited_on as end_date,c2.visited_on as start_date
    from Customer c1 , Customer c2
    where datediff(c1.visited_on,c2.visited_on) = 6
)

select t.end_date as visited_on,sum(c.amount) as amount,round(sum(c.amount) / 7,2) as average_amount
from Customer c 
left join tem_date t 
on c.visited_on between t.start_date and t.end_date
group by t.start_date,t.end_date

结果:

在这里插入图片描述


总结:

能运行就行。



http://lihuaxi.xjx100.cn/news/2088264.html

相关文章

Java中乱码浅析及解决方案

在 Java 中出现乱码通常是由于字符编码不一致或不正确导致的。这种情况经常出现在处理文件、网络数据传输或数据库交互等场景下。以下是关于 Java 中乱码的浅析及解决方案: 1. 字符编码概念 字符编码:是一种将字符转换为字节的规则,常见的字…

替换模板变量生成测试用例

需求: 针对指标的查值有固定的文法例如 ${org_name}的业务量是多少,需要替换变量来生成测试用例 这个是最新的,把变量和列表放到map里面 package net.yto.com.testplatform;import com.alibaba.fastjson.JSON;import java.util.ArrayList; i…

GitLab页面创建分支,并且本地idea切换新建分支后推送代码到远程仓库

点开对应的项目 创建分支 创建分支 添加分支名称 创建好分支 idea开发工具从远程仓库切换分支 切换后的分支 推送到远程仓库

el-form v-for循环列表的表单如何校验

1、普通的表单校验直接在最外层<el-form> :model"数据" :rules"规则" &#xff0c;再在<el-form-item>层设置prop值与model里数据定义的key保持一致即可。 <el-form-item label"名称" prop"ruleName" :rules"[{r…

Codeql复现CVE-2018-11776学习笔记

基本使用 1、首先下载struts2漏洞版本源码&#xff1a; https://codeload.github.com/apache/struts/zip/refs/tags/STRUTS_2_3_20 2、构建codeql数据库&#xff08;构建失败文末有解决办法&#xff09;&#xff1a; codeql database create ~/CodeQL/databases/struts2-2.3.…

① MyBatis使用入门,解决IDEA中Mapper映射文件警告。

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ MyBatis使用入门&#xff0c;解决IDEA中Mapper…

【C++设计模式】UML图的介绍及其画法

文章目录 前言一、UML图的介绍1.1 UML图是什么1.2 UML图的作用 二、UML图的画法2.1 最简单的UML图2.2 继承的UML图2.3 关联关系2.4 聚合关系2.5 组合关系2.6 依赖关系 总结 前言 在软件开发过程中&#xff0c;设计模式是一种被广泛应用的方法&#xff0c;它为解决特定问题提供…

uniapp微信小程序 隐藏顶部导航栏 路由跳转带参数

隐藏单页顶部导航栏和左上角返回按钮&#xff0c;在pages.json里配置 {"path": "pages/gameLogin/gameLogin","style": {"navigationStyle":"custom","app-plus":{"titleView":false}} } 路由跳转 u…