Получить ТОП 10 продаваемых товаров онлайн урок.


Для получения ТОП 10 продаваемых товаров, необходимо соединить поля из таблицы товаров с полями таблицы платежей. Напрямую этого сделать нельзя, поэтому необходимо соединять все таблицы между продуктами и платежами - заказы, описание заказов, заказчики.

products p
JOIN order_details od ON p.id = od.product_id
JOIN orders o ON od.order_id = o.id
JOIN customers c ON c.id = o.customer_id
JOIN payments pa ON pa.customer_id = c.id

Осталось выбрать нужные поля - это идентификатор продукта и количество его повторений в выборке из этого соединения. Идея состоит в том, что продукты могут состоять в разных заказах, а клиент оплачивает не отдельный продукт, а заказ. Ввиду того, что продукты и детали заказов связаны связью многие ко многим, то мы получим именной столько повторений идентификатора продукта, сколько раз он фактически был куплен. Результат необходимо упорядочить по убыванию количества платежей и отобрать первые 10 записей.

SELECT p.id AS product, count( p.id ) AS count
FROM products p
JOIN order_details od ON p.id = od.product_id
JOIN orders o ON od.order_id = o.id
JOIN customers c ON c.id = o.customer_id
JOIN payments pa ON pa.customer_id = c.id
GROUP BY product
ORDER BY count DESC
LIMIT 0 , 10


+---------+-------+
| product | count |
+---------+-------+
| 40 | 242 |
| 68 | 164 |
| 57 | 159 |
| 88 | 156 |
| 94 | 150 |
| 81 | 147 |
| 26 | 146 |
| 15 | 145 |
| 28 | 143 |
| 89 | 137 |
+---------+-------+