Я пишу запрос для приложения, в котором необходимо перечислить все продукты с указанием количества их покупок.
Я придумал это, и оно работает, но я не слишком уверен, насколько оно оптимизировано. Мой SQL действительно ржавый из-за интенсивного использования ORM, но в этом случае запрос является гораздо более элегантным решением.
Можете ли вы найти что-то не так (подход мудрый) с запросом?
SELECT products.id,
products.long_name AS name,
count(oi.order_id) AS sold
FROM products
LEFT OUTER JOIN
( SELECT * FROM orderitems
INNER JOIN orders ON orderitems.order_id = orders.id
AND orders.paid = 1 ) AS oi
ON oi.product_id = products.id
GROUP BY products.id
Схема (с соответствующими полями) выглядит следующим образом:
*orders* id, paid
*orderitems* order_id, product_id
*products* id
UPDATE
Это для MySQL