在bestsell products MySQL中获得产品排名

时间:2017-08-14 14:20:26

标签: php mysql

让我告诉你一个我遇到的问题的例子。例如,我们有一个名为order的表,我们在其中插入所有订单和购买。

表A(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    |
+------------------------------+------+

1 个答案:

答案 0 :(得分:1)

您可以使用派生表来解决此问题。无论如何,查询会很慢,但它会为您提供所需的结果。

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';