返回介绍

solution / 2800-2899 / 2893.Calculate Orders Within Each Interval / README

发布于 2024-06-17 01:02:59 字数 2555 浏览 0 评论 0 收藏 0

2893. 计算每个区间内的订单

English Version

题目描述

表: Orders

+-------------+------+ 
| Column Name | Type | 
+-------------+------+ 
| minute    | int  | 
| order_count | int  |
+-------------+------+
minute 是该表的主键。
该表的每一行包含分钟数以及在特定分钟数内收到的订单数量。总行数将是 6 的倍数。

编写一个查询,计算每个 区间 内的 总订单数量。 每个区间被定义为 6 分钟的组合。

  •  1 到 6 分钟属于第 1 个区间,而 7 到 12 分钟属于第 2 个区间,以此类推。

按 _升序顺序_ _返回__结果表,_按_ interval_no 排序。_

结果表的格式如下示例所示。

 

示例 1:

输入:
Orders table:
+--------+-------------+
| minute | order_count | 
+--------+-------------+
| 1    | 0       |
| 2    | 2       | 
| 3    | 4       | 
| 4    | 6       | 
| 5    | 1       | 
| 6    | 4       | 
| 7    | 1       | 
| 8    | 2       | 
| 9    | 4       | 
| 10   | 1       | 
| 11   | 4       | 
| 12   | 6       | 
+--------+-------------+
输出:
+-------------+--------------+
| interval_no | total_orders | 
+-------------+--------------+
| 1       | 17       | 
| 2       | 18       |  
+-------------+--------------+
解释:
- 区间号 1 包括从 1 到 6 分钟的时间。这 6 分钟内的总订单数量为 (0 + 2 + 4 + 6 + 1 + 4) = 17。
- 区间号 2 包括从 7 到 12 分钟的时间。这 6 分钟内的总订单数量为 (1 + 2 + 4 + 1 + 4 + 6) = 18。
按升序顺序返回结果表,按 interval_no 排序。

解法

方法一:窗口函数

我们可以用窗口函数 sum() over() 来计算每 $6$ 分钟的订单总数,然后每条记录中的 minute 能被 $6$ 整除的记录。

# Write your MySQL query statement below
WITH
  T AS (
    SELECT
      minute,
      SUM(order_count) OVER (
        ORDER BY minute
        ROWS 5 PRECEDING
      ) AS total_orders
    FROM Orders
  )
SELECT minute / 6 AS interval_no, total_orders
FROM T
WHERE minute % 6 = 0;

方法二

SELECT
  FLOOR((minute + 5) / 6) AS interval_no,
  SUM(order_count) AS total_orders
FROM Orders
GROUP BY 1
ORDER BY 1;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文