列表

详情


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

表: Orders

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

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

升序顺序 返回结果表, 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 排序。

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
# Write your MySQL query statement below

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;

上一题