参观营业额变化增长(sql练习)

表: 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 升序排序

返回结果格式的例子如下。

示例 1:

输入:
Customer 表:
+-------------+--------------+--------------+-------------+
| customer_id | name         | visited_on   | amount      |
+-------------+--------------+--------------+-------------+
| 1           | Jhon         | 2019-01-01   | 100         |
| 2           | Daniel       | 2019-01-02   | 110         |
| 3           | Jade         | 2019-01-03   | 120         |
| 4           | Khaled       | 2019-01-04   | 130         |
| 5           | Winston      | 2019-01-05   | 110         | 
| 6           | Elvis        | 2019-01-06   | 140         | 
| 7           | Anna         | 2019-01-07   | 150         |
| 8           | Maria        | 2019-01-08   | 80          |
| 9           | Jaze         | 2019-01-09   | 110         | 
| 1           | Jhon         | 2019-01-10   | 130         | 
| 3           | Jade         | 2019-01-10   | 150         | 
+-------------+--------------+--------------+-------------+
输出:
+--------------+--------------+----------------+
| visited_on   | amount       | average_amount |
+--------------+--------------+----------------+
| 2019-01-07   | 860          | 122.86         |
| 2019-01-08   | 840          | 120            |
| 2019-01-09   | 840          | 120            |
| 2019-01-10   | 1000         | 142.86         |
+--------------+--------------+----------------+
解释:
第一个七天消费平均值从 2019-01-01 到 2019-01-07 是restaurant-growth/restaurant-growth/ (100 + 110 + 120 + 130 + 110 + 140 + 150)/7 = 122.86
第二个七天消费平均值从 2019-01-02 到 2019-01-08 是 (110 + 120 + 130 + 110 + 140 + 150 + 80)/7 = 120
第三个七天消费平均值从 2019-01-03 到 2019-01-09 是 (120 + 130 + 110 + 140 + 150 + 80 + 110)/7 = 120
第四个七天消费平均值从 2019-01-04 到 2019-01-10 是 (130 + 110 + 140 + 150 + 80 + 110 + 130 + 150)/7 = 142.86

本题需要用到动态移动窗口函数,以保证每次移动窗口时以固定长度移动,反应在题目中就是对每行记录获取前七天的值进行求和与平均。

格式:

window_function(字段)over([partition by 字段] [order by 字段] rows between N preceding and current row)

此处的N preceding为向前N行,如果N写在and并且写成N following之后可以理解为向后N行。

select
    visited_on,
    amount,
    average_amount
from
    (select
        a.visited_on,
        sum(dayamount)
        over(order by visited_on rows between 6 preceding and current row) amount,
        round(avg(dayamount)
        over(order by visited_on rows between 6 preceding and current row),2) average_amount,
        minv
    from
        (select
            visited_on,
            sum(amount) dayamount
        from customer
        group by visited_on
        order by visited_on asc) a
    cross join
    (select
        min(visited_on) minv
    from
        customer) b) c
where datediff(c.visited_on,minv)>=6

相关推荐

  1. 参观营业额变化增长sql练习

    2024-06-09 10:40:02       7 阅读
  2. 【LeetCode】1321. 餐馆营业额变化增长

    2024-06-09 10:40:02       33 阅读
  3. YashanDB练习SQL

    2024-06-09 10:40:02       28 阅读
  4. SQL 练习

    2024-06-09 10:40:02       19 阅读
  5. Sql综合练习

    2024-06-09 10:40:02       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-09 10:40:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-09 10:40:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-09 10:40:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-09 10:40:02       18 阅读

热门阅读

  1. g++ 预处理 编译 汇编 链接 命令

    2024-06-09 10:40:02       7 阅读
  2. Npm发布自己的插件包

    2024-06-09 10:40:02       7 阅读
  3. Linux基本指令查询硬件信息001

    2024-06-09 10:40:02       9 阅读
  4. 360数字安全:2024年3月勒索软件流行态势分析报告

    2024-06-09 10:40:02       8 阅读
  5. Redis中的发布/订阅模式:构建灵活的消息系统

    2024-06-09 10:40:02       8 阅读
  6. 2024年OceanBase数据库中级培训课程

    2024-06-09 10:40:02       9 阅读
  7. cocos入门9:三维向量点乘

    2024-06-09 10:40:02       11 阅读
  8. TypeScript 中的 tsconfig.json

    2024-06-09 10:40:02       7 阅读
  9. Tomcat 启动闪退问题解决方法

    2024-06-09 10:40:02       7 阅读
  10. WDF驱动开发-PNP和电源管理(二)

    2024-06-09 10:40:02       14 阅读
  11. Linux下tcpwrappers防火墙介绍

    2024-06-09 10:40:02       7 阅读
  12. Mysql的脏读、幻读、不可重复读

    2024-06-09 10:40:02       7 阅读
  13. PCL 指数函数回归(二维)

    2024-06-09 10:40:02       6 阅读