Hone logo
Hone
Problems

Efficiently Filter Products by Multiple Categories

Imagine you are developing an e-commerce platform's product catalog. You need to display products that belong to a specific set of categories. Instead of writing multiple OR conditions, which can become cumbersome and less readable for many categories, you want to leverage the power of the IN clause in SQL. This challenge will test your ability to construct a query that efficiently retrieves products based on a list of desired categories.

Problem Description

Your task is to write an SQL query that retrieves all products from a Products table that belong to a given list of category IDs. You will be provided with a list of category IDs and need to return the product_id, product_name, and category_id for all matching products.

Key Requirements:

  • Query the Products table.
  • Filter products based on a provided list of category_id values.
  • Use the IN clause for efficient filtering.
  • Return the product_id, product_name, and category_id for each matching product.

Expected Behavior:

The query should return only those rows from the Products table where the category_id is present in the provided list of category IDs.

Edge Cases to Consider:

  • What if the provided list of category IDs is empty?
  • What if none of the provided category IDs match any products in the table?

Examples

Example 1:

Input:
Products Table:
| product_id | product_name | category_id |
|------------|--------------|-------------|
| 101        | Laptop       | 10          |
| 102        | Keyboard     | 12          |
| 103        | Mouse        | 12          |
| 104        | Monitor      | 11          |
| 105        | Webcam       | 10          |

Desired Category IDs: [10, 11]
Output:
| product_id | product_name | category_id |
|------------|--------------|-------------|
| 101        | Laptop       | 10          |
| 104        | Monitor      | 11          |
| 105        | Webcam       | 10          |

Explanation: The products with category_id 10 (Laptop, Webcam) and category_id 11 (Monitor) are included because their category_id is present in the list [10, 11].

Example 2:

Input:
Products Table:
| product_id | product_name | category_id |
|------------|--------------|-------------|
| 201        | T-Shirt      | 20          |
| 202        | Jeans        | 21          |
| 203        | Hoodie       | 20          |

Desired Category IDs: [22]
Output:
(Empty Result Set)

Explanation: No products match the category_id 22, so an empty result set is returned.

Example 3: (Edge Case - Empty Category List)

Input:
Products Table:
| product_id | product_name | category_id |
|------------|--------------|-------------|
| 301        | Book A       | 30          |
| 302        | Book B       | 31          |

Desired Category IDs: []
Output:
(Empty Result Set)

Explanation: When the list of desired category IDs is empty, no products can possibly match the criteria, resulting in an empty output.

Constraints

  • The Products table will contain at least one row.
  • The category_id column in the Products table will be of an integer type.
  • The input list of desired category IDs will be an array or list of integers.
  • The query should be efficient, especially when the list of category IDs is large.

Notes

  • Consider how the IN clause handles an empty list of values. Most SQL dialects will return no rows, which aligns with the expected behavior for an empty input list.
  • Think about the readability and maintainability benefits of using IN compared to a long chain of OR conditions for this type of filtering.
Loading editor...
plaintext