https://leetcode.com/problems/average-selling-price/description/ Easy

Условие

Даны две таблицы:

Prices

column name type
product_id int
start_date date
end_date date
price int

UnitsSold

column name type
product_id int
purchase_date date
units int

Каждая запись в Prices указывает цену price для product_id в период от start_date до end_date включительно, а каждая запись в UnitsSold показывает, сколько units единиц product_id было продано в день purchase_date. Таблицы могут содержать дубликаты. Напишите запрос, который для каждого product_id вычисляет среднюю цену продажи, равную сумме price * units, делённой на общее число проданных units, округлённую до двух знаков после запятой. Результат вернуть в любом порядке.

Решение

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
ORDER BY p.product_id;