3626: Find Stores with Inventory Imbalance

Problem Statement

Table: stores

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| store_id    | int     |
| store_name  | varchar |
| location    | varchar |
+-------------+---------+
store_id is the unique identifier for this table.
Each row contains information about a store and its location.

Table: inventory

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| inventory_id| int     |
| store_id    | int     |
| product_name| varchar |
| quantity    | int     |
| price       | decimal |
+-------------+---------+
inventory_id is the unique identifier for this table.
Each row represents the inventory of a specific product at a specific store.

Write a solution to find stores that have inventory imbalance - stores where the most expensive product has lower stock than the cheapest product.

  • For each store, identify the most expensive product (highest price) and its quantity
  • For each store, identify the cheapest product (lowest price) and its quantity
  • A store has inventory imbalance if the most expensive product's quantity is less than the cheapest product's quantity
  • Calculate the imbalance ratio as (cheapest_quantity / most_expensive_quantity)
  • Round the imbalance ratio to 2 decimal places
  • Only include stores that have at least 3 different products

Return the result table ordered by imbalance ratio in descending order, then by store name in ascending order.

The result format is in the following example.

Example:

Input:

stores table:

+----------+----------------+-------------+
| store_id | store_name     | location    |
+----------+----------------+-------------+
| 1        | Downtown Tech  | New York    |
| 2        | Suburb Mall    | Chicago     |
| 3        | City Center    | Los Angeles |
| 4        | Corner Shop    | Miami       |
| 5        | Plaza Store    | Seattle     |
+----------+----------------+-------------+

inventory table:

+--------------+----------+--------------+----------+--------+
| inventory_id | store_id | product_name | quantity | price  |
+--------------+----------+--------------+----------+--------+
| 1            | 1        | Laptop       | 5        | 999.99 |
| 2            | 1        | Mouse        | 50       | 19.99  |
| 3            | 1        | Keyboard     | 25       | 79.99  |
| 4            | 1        | Monitor      | 15       | 299.99 |
| 5            | 2        | Phone        | 3        | 699.99 |
| 6            | 2        | Charger      | 100      | 25.99  |
| 7            | 2        | Case         | 75       | 15.99  |
| 8            | 2        | Headphones   | 20       | 149.99 |
| 9            | 3        | Tablet       | 2        | 499.99 |
| 10           | 3        | Stylus       | 80       | 29.99  |
| 11           | 3        | Cover        | 60       | 39.99  |
| 12           | 4        | Watch        | 10       | 299.99 |
| 13           | 4        | Band         | 25       | 49.99  |
| 14           | 5        | Camera       | 8        | 599.99 |
| 15           | 5        | Lens         | 12       | 199.99 |
+--------------+----------+--------------+----------+--------+

Output:

+----------+----------------+-------------+------------------+--------------------+------------------+
| store_id | store_name     | location    | most_exp_product | cheapest_product   | imbalance_ratio  |
+----------+----------------+-------------+------------------+--------------------+------------------+
| 3        | City Center    | Los Angeles | Tablet           | Stylus             | 40.00            |
| 1        | Downtown Tech  | New York    | Laptop           | Mouse              | 10.00            |
| 2        | Suburb Mall    | Chicago     | Phone            | Case               | 25.00            |
+----------+----------------+-------------+------------------+--------------------+------------------+

Explanation:

  • Downtown Tech (store_id = 1):
<ul>
	<li>Most expensive product: Laptop ($999.99) with quantity 5</li>
	<li>Cheapest product: Mouse ($19.99) with quantity 50</li>
	<li>Inventory imbalance: 5 &lt; 50 (expensive product has lower stock)</li>
	<li>Imbalance ratio: 50 / 5 = 10.00</li>
	<li>Has 4 products (&ge; 3), so qualifies</li>
</ul>
</li>
<li><strong>Suburb Mall (store_id = 2):</strong>
<ul>
	<li>Most expensive product: Phone ($699.99) with quantity 3</li>
	<li>Cheapest product: Case ($15.99) with quantity 75</li>
	<li>Inventory imbalance: 3 &lt; 75 (expensive product has lower stock)</li>
	<li>Imbalance ratio: 75 / 3 = 25.00</li>
	<li>Has 4 products (&ge; 3), so qualifies</li>
</ul>
</li>
<li><strong>City Center (store_id = 3):</strong>
<ul>
	<li>Most expensive product: Tablet ($499.99) with quantity 2</li>
	<li>Cheapest product: Stylus ($29.99) with quantity 80</li>
	<li>Inventory imbalance: 2 &lt; 80 (expensive product has lower stock)</li>
	<li>Imbalance ratio: 80 / 2 = 40.00</li>
	<li>Has 3 products (&ge; 3), so qualifies</li>
</ul>
</li>
<li><strong>Stores not included:</strong>
<ul>
	<li>Corner Shop (store_id = 4): Only has 2 products (Watch, Band) - doesn&#39;t meet minimum 3 products requirement</li>
	<li>Plaza Store (store_id = 5): Only has 2 products (Camera, Lens) - doesn&#39;t meet minimum 3 products requirement</li>
</ul>
</li>

The Results table is ordered by imbalance ratio in descending order, then by store name in ascending order

Code Solution