Post

Leetcode 1251: Average Selling Price

(product_id, start_date, end_date) is the primary key (combination of columns with unique values) for this table. Each row of this table indicates the price of the product_id in the period from start_date to end_date. For each product_id there will be no two overlapping periods. That means there will be no two intersecting periods for the same product_id.

Description

Table: Prices

Column NameType
product_idint
start_datedate
end_datedate
priceint

(product_id, start_date, end_date) is the primary key (combination of columns with unique values) for this table. Each row of this table indicates the price of the product_id in the period from start_date to end_date. For each product_id there will be no two overlapping periods. That means there will be no two intersecting periods for the same product_id.

Table: UnitsSold

Column NameType
product_idint
purchase_datedate
unitsint

This table may contain duplicate rows. Each row of this table indicates the date, units, and product_id of each product sold.

Write a solution to find the average selling price for each product. average_price should be rounded to 2 decimal places.

Return the result table in any order.

The result format is in the following example.

Example 1

Input:

Prices table:

product*idstart_dateend_dateprice
12019-02-172019-02-285
12019-03-012019-03-2220
22019-02-012019-02-2015
22019-02-212019-03-3130

UnitsSold table:

product_idpurchase_dateunits
12019-02-25100
12019-03-0115
22019-02-10200
22019-03-2230

Output:

product_idaverage_price
16.96
216.96

Explanation:

Average selling price = Total Price of Product / Number of products sold.
Average selling price for product 1 = ((100 * 5) + (15 _ 20)) / 115 = 6.96
Average selling price for product 2 = ((200 _ 15) + (30 _ 30)) / 230 = 16.96

Solution

1
2
3
4
5
6
SELECT p.product_id, IFNULL(ROUND(SUM(p.price * u.units) / SUM(u.units), 2), 0) as average_price
    FROM Prices p
    LEFT JOIN UnitsSold u
    ON p.product_id = u.product_id
    AND u.purchase_date BETWEEN p.start_date AND p.end_date
    GROUP BY p.product_id;
This post is licensed under CC BY 4.0 by the author.