# Write your MySQL query statement below
2893. 计算每个区间内的订单
表: 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 排序。
原站题解
mysql 解法, 执行用时: 237 ms, 内存消耗: 0 B, 提交时间: 2023-10-15 17:13:13
SELECT floor((minute + 5) / 6) AS interval_no, SUM(order_count) AS total_orders FROM Orders GROUP BY floor((minute + 5) / 6) ORDER BY interval_no;
mysql 解法, 执行用时: 209 ms, 内存消耗: 0 B, 提交时间: 2023-10-15 17:12:58
# Write your MySQL query statement below # 先使用窗口函数计算当前行以及前5行的和 with t1 as ( select minute, sum(order_count) over (order by minute rows between 5 preceding and current row) as total_orders from Orders ) # 然后选择6的倍数行 select ROW_NUMBER() OVER(order by minute) as interval_no, total_orders from t1 where MOD(minute, 6) = 0;