Skip to main content
Back to problems
#2893
Medium Database

Calculate orders within each interval

Database
67.2% acceptance
Mar 31, 2026
23
3

No description available.

Solution

Pandas
Time O(1)
Space O(1)
LeetCode
solution.pandas
# Table: Orders
# 
# +-------------+------+
# | Column Name | Type |
# +-------------+------+
# | minute      | int  |
# | order_count | int  |
# +-------------+------+
# minute is the primary key for this table.
# Each row of this table contains the minute and number of orders received during that specific minute. The total number of rows will be a multiple of 6.
# 
# Write a query to calculate total orders within each interval. Each interval is defined as a combination of 6 minutes.
# 
# Minutes 1 to 6 fall within interval 1, while minutes 7 to 12 belong to interval 2, and so forth.
# 
# Return the result table ordered by interval_no in ascending order.
# 
# The result format is in the following example.
#
# Example 1:
# Input:
# 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           |
# +--------+-------------+
# Output:
# +-------------+--------------+
# | interval_no | total_orders |
# +-------------+--------------+
# | 1           | 17           |
# | 2           | 18           |
# +-------------+--------------+
# Explanation:
# - Interval number 1 comprises minutes from 1 to 6. The total orders in these six minutes are (0 + 2 + 4 + 6 + 1 + 4) = 17.
# - Interval number 2 comprises minutes from 7 to 12. The total orders in these six minutes are (1 + 2 + 4 + 1 + 4 + 6) = 18.
# Returning table orderd by interval_no in ascending order.

import pandas as pd

def calculate_runs(orders: pd.DataFrame) -> pd.DataFrame:
  orders['interval_no'] = ((orders['minute'] - 1) // 6) + 1
  result = orders.groupby('interval_no', as_index=False)['order_count'].sum()
  result.columns = ['interval_no', 'total_orders']
  return result.sort_values('interval_no')