{x}
blog image

The Users That Are Eligible for Discount

Solution Explanation for LeetCode 2230: The Users That Are Eligible for Discount

This problem requires querying a database table (Purchases) to find users who meet specific criteria for a discount. The criteria are: a purchase within a given date range (startDate, endDate) and a minimum purchase amount (minAmount).

Approach

The most efficient way to solve this is using a SQL query. We need to filter the Purchases table based on two conditions:

  1. Date Range: The time_stamp must fall within the startDate and endDate (inclusive). Crucially, we treat the dates as the start of the day.
  2. Minimum Amount: The amount must be greater than or equal to minAmount.

We then need to select only the unique user_id values that satisfy both conditions and order the results.

SQL Solution (MySQL)

The provided MySQL stored procedure efficiently implements this logic:

CREATE PROCEDURE getUserIDs(startDate DATE, endDate DATE, minAmount INT)
BEGIN
    # Write your MySQL query statement below.
    SELECT DISTINCT user_id
    FROM Purchases
    WHERE amount >= minAmount AND time_stamp BETWEEN startDate AND endDate
    ORDER BY user_id;
END;

Explanation:

  • CREATE PROCEDURE getUserIDs(...): This defines a stored procedure named getUserIDs that takes the startDate, endDate, and minAmount as input parameters. Stored procedures improve code organization and reusability.
  • SELECT DISTINCT user_id: This selects only the unique user IDs. We use DISTINCT because a user might have multiple purchases that meet the criteria.
  • FROM Purchases: This specifies the table to query.
  • WHERE amount >= minAmount AND time_stamp BETWEEN startDate AND endDate: This is the crucial filtering condition. It ensures that both the minimum amount and date range requirements are met. BETWEEN is inclusive.
  • ORDER BY user_id: This orders the results in ascending order of user_id, as requested.

Time Complexity Analysis

The time complexity of the SQL query is dominated by the table scan. In the worst case, the database needs to examine every row in the Purchases table. Therefore, the time complexity is O(N), where N is the number of rows in the Purchases table. The DISTINCT and ORDER BY operations add some overhead, but they are typically sublinear in practice due to database optimizations (e.g., using indexes). If an index exists on the time_stamp column, the database can significantly improve the performance of the WHERE clause.

Space Complexity Analysis

The space complexity is O(M), where M is the number of unique user IDs that satisfy the conditions. In the worst case, M could be equal to N (all users meet the criteria). The space used is primarily for storing the result set. The space used by the database for temporary structures during query execution is not considered in a typical space complexity analysis.

In summary, the solution provides an efficient and clear way to solve the problem using a concise and well-structured SQL query. The time complexity is linear in the number of rows in the table, and space complexity is linear in the number of qualifying users. Database indexing can significantly optimize query performance.