Получить рейтинг продукта в списке самых продаваемых продуктов MySQL

Позвольте мне рассказать вам пример моей проблемы. Например, у нас есть таблица с именем order где мы вставляем все заказы и покупки.

Таблица А (orders):

+--------------------------+
| CustomerKey | ProductKey |
+--------------------------+
| 306545      | pro1       |
| 597864      | pro3       |
| 784678      | pro2       |
| 905479      | pro3       |
| 306545      | pro1       |
| 348965      | pro3       |
| 784678      | pro3       |
+--------------------------+

Теперь я хотел бы заказать и получить наши самые продаваемые продукты и, например, получить звание pro3 в списке самых продаваемых продуктов.

Вывод запроса:

+-------------------------------+
| id | ProductKey | numberSold  |
+-------------------------------+
| 1  | pro3       | 4           |
| 2  | pro1       | 2           |
| 3  | pro2       | 1           |
+-------------------------------+

Я написал этот запрос:

select ProductKey,
count(1) as numberSold
from A group
by ProductKey
order by count(1) desc

Результат не полезен для меня. Например, мне нужно получить pro27 в рейтинге самых продаваемых продуктов (у нас 100 000 продуктов!)

+-------------------------------------+
| id | ProductKey | numberSold | rank |
+-------------------------------------|
| 1  | pro3       | 4          | 1    |
| 2  | pro1       | 2          | 2    |
| 3  | pro2       | 1          | 3    |
+------------------------------+------+

0

Решение

Вы можете использовать производную таблицу для решения этой проблемы. В любом случае запрос будет медленным, но он даст вам желаемый результат.

SET @rank = 0;

SELECT *
FROM
(
select (@rank := @rank + 1) AS Rank,
ProductKey,
count(1) as numberSold
from A
group by ProductKey
order by count(1) desc
) dt
WHERE dt.ProductKey = 'prod27';
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector