Precio de Venta Promedio
Escribe una solución para encontrar el precio promedio de venta para cada producto. `average_price` debe redondearse a 2 decimales. Regresa el resultado en cualquier orden.
Tabla: Prices
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| product_id | int |
| start_date | date |
| end_date | date |
| price | int |
+---------------+---------+
- (`product_id`, `start_date`, `end_date`) es la llave primaria (combinación de columnas con valores únicos) para esta tabla.
- Cada fila de esta tabla indica el precio del `product_id` en el periodo especificado desde la fecha de inicio `start_date` hasta la fecha de fin `end_date`.
- Ningún producto con `product_id` tendrá periodos de fechas traslapados. Lo cual significa que no habrá dos
periodos que se intersecten para el mismo producto.
Tabla: UnitsSold
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| product_id | int |
| purchase_date | date |
| units | int |
+---------------+---------+
- Esta tabla puede contener filas duplicadas.
- Cada fila de esta tabla indica la fecha (`purchase_date`), unidades (`units`) y ID (`product_id`) de cada producto vendido.
El formato del resultado se muestra en el siguiente ejemplo.
Ejemplo 1:
Entrada:
Tabla Prices:
+------------+------------+------------+--------+
| 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 |
+------------+------------+------------+--------+
Tabla UnitsSold:
+------------+---------------+-------+
| 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 |
+------------+---------------+-------+
Salida:
+------------+---------------+
| product_id | average_price |
+------------+---------------+
| 1 | 6.96 |
| 2 | 16.96 |
+------------+---------------+
Explicación:
- Precio de venta promedio = Precio total del producto / Número de productos vendidos.
- Precio de venta promedio para el producto 1 = ((100 * 5) + (15 * 20)) / 115 = 6.96
- Precio de venta promedio para el producto 2 = ((200 * 15) + (30 * 30)) / 230 = 16.96
Solución:
WITH data AS (
SELECT p.product_id,
s.units,
s.purchase_date,
p.price
FROM prices p
LEFT JOIN unitssold s
ON p.product_id = s.product_id
WHERE s.purchase_date IS NULL
OR s.purchase_date BETWEEN p.start_date AND p.end_date
GROUP BY p.product_id, s.purchase_date
)
SELECT product_id,
CASE WHEN purchase_date IS NULL THEN 0
ELSE ROUND(SUM(units * price) / SUM(units), 2)
END AS average_price
FROM data GROUP BY product_id;