SQL-每日一题【1321. 餐馆营业额变化增长】

题目

表: Customer

SQL-每日一题【1321. 餐馆营业额变化增长】_第1张图片

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

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

结果按 visited_on 升序排序

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

示例 1:

 SQL-每日一题【1321. 餐馆营业额变化增长】_第2张图片

SQL-每日一题【1321. 餐馆营业额变化增长】_第3张图片 

 

解题思路

1.题目要求我们分析一下可能的营业额变化增长,也就是计算一下以 7 天(某日期 + 该日期前的 6 天)为一个时间段的顾客消费平均值。

2.首先我们从 Customer 表中选择 visited_on 列的值,并使用 GROUP BY 子句按 visited_on进行分组。同时,使用 SUM 函数计算每个 visited_on 值对应的 amount 列的总和,并将其命名为 amount。

3.然后我们使用SUM函数和窗口函数来计算visited_on列对应的amount列在过去6天内的累计总和。

4.最后,使用WHERE子句来筛选出visited_on值与最早的visited_on值之间的天数大于等于6的记录。通过使用datediff函数来计算visited_on与最早visited_on值之间的天数,并与6进行比较来实现的。

5.最终的结果将包含visited_on、sum_amount和average_amount三列的值,其中sum_amount是visited_on对应的amount列在过去6天内的累计总和,average_amount是每天的平均amount值。

代码实现

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 BETWEEN INTERVAL '6' DAY
    PRECEDING AND CURRENT ROW) AS sum_amount
    FROM(
        SELECT visited_on,
        SUM(amount) AS amount
        FROM Customer
        GROUP BY visited_on
    )a 
)b
WHERE datediff(visited_on,(SELECT MIN(visited_on) FROM Customer)) >= 6

测试结果

你可能感兴趣的:(sql,数据库)