{x}
blog image

Sellers With No Sales

Solution Explanation: Finding Sellers With No Sales in 2020

The problem requires identifying sellers who didn't make any sales in 2020. We're given three tables: Customer, Orders, and Seller. The solution involves joining these tables and filtering the results based on the sales data.

Approach

The most efficient approach uses LEFT JOIN, GROUP BY, and HAVING clauses in SQL.

  1. LEFT JOIN: We start by performing a LEFT JOIN between the Seller and Orders tables using seller_id as the join key. A LEFT JOIN ensures that all sellers are included in the result, even if they have no matching entries in the Orders table.

  2. GROUP BY: We then GROUP BY the seller_id to aggregate the sales data for each seller. This allows us to count the number of sales for each seller.

  3. HAVING: The crucial step is using the HAVING clause. We want to filter out sellers who had no sales in 2020. The condition IFNULL(SUM(YEAR(sale_date) = 2020), 0) = 0 achieves this. Let's break this down:

    • YEAR(sale_date) = 2020: This condition checks if the sale date is in 2020. It returns 1 (true) if it is and 0 (false) otherwise.
    • SUM(...): This sums the results of the boolean expression for each seller. The sum represents the total number of sales in 2020 for that seller.
    • IFNULL(..., 0): This handles the case where a seller has no sales at all. If the SUM is NULL (meaning no sales), it replaces it with 0.
    • ... = 0: Finally, this condition filters out sellers where the sum (or 0 if no sales) is equal to 0, meaning they had no sales in 2020.
  4. ORDER BY: Finally, we ORDER BY seller_name in ascending order to fulfill the requirement of the problem statement.

MySQL Code

SELECT seller_name
FROM
    Seller
    LEFT JOIN Orders USING (seller_id)
GROUP BY seller_id
HAVING IFNULL(SUM(YEAR(sale_date) = 2020), 0) = 0
ORDER BY 1;

Time Complexity Analysis

  • The LEFT JOIN operation has a time complexity that depends on the size of the tables and the join algorithm used by the database system. In the worst case, it could be O(N*M), where N and M are the number of rows in Seller and Orders tables, respectively. However, database systems are highly optimized for joins, and the actual performance is usually much better.
  • The GROUP BY operation has a time complexity of O(N), where N is the number of rows after the join.
  • The HAVING clause filters the grouped results, taking at most O(N) time.
  • The ORDER BY operation has a time complexity of O(N log N) in the average case (using efficient sorting algorithms like merge sort).

Therefore, the overall time complexity is dominated by the join and the sorting operations, making it roughly O(N log N) in the average case, where N is the number of rows in the joined table. The exact complexity depends heavily on database optimization and indexing.

Space Complexity Analysis

The space complexity is mainly determined by the intermediate results generated during the join and grouping operations. In the worst case, it's proportional to the size of the joined table, which is O(N) where N is the number of rows in the joined table. Again, the actual space usage depends on database optimization techniques.