Table: Prices
Column Name | Type |
---|---|
product_id | int |
start_date | date |
end_date | date |
price | int |
(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 Name | Type |
---|---|
product_id | int |
purchase_date | date |
units | int |
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_id | start_date | end_date | price |
---|---|---|---|
1 | 2019-02-17 | 2019-02-28 | 5 |
1 | 2019-03-01 | 2019-03-22 | 20 |
2 | 2019-02-01 | 2019-02-20 | 15 |
2 | 2019-02-21 | 2019-03-31 | 30 |
UnitsSold table:
product_id | purchase_date | units |
---|---|---|
1 | 2019-02-25 | 100 |
1 | 2019-03-01 | 15 |
2 | 2019-02-10 | 200 |
2 | 2019-03-22 | 30 |
Output:
product_id | average_price |
---|---|
1 | 6.96 |
2 | 16.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
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
學習點:
1.IFNULL()
2.日期查看區間 BETWEEN