Mysql创建一个名为Rank

时间:2017-08-07 05:53:16

标签: php mysql

让我从我的问题中告诉你一个例子 例如,我们有一个名为(order)的表,它将所有订单和购买插入此表。

表A(订单):

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

现在我想订购并获得我们的Bestselling产品 例如,在畅销产品列表中获得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

但它不完整!这个查询需要一行名为rank(查看下面的查询输出):

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

2 个答案:

答案 0 :(得分:0)

你可以这样做:

SET @counter = 0; 
select ProductKey, count(1),  as numberSold, (@counter := @counter +1) as rank from A group by ProductKey order by count(1) desc

我还要指出,如果您通过PHP运行此查询,那么您可以在查询中不使用rank列,因为当您遍历结果时,您可以只回显$counter变量的值从1开始,每次迭代增加1。

答案 1 :(得分:-1)

您可以通过后台流程实现此目的。 运行 cronjob ,就像对产品进行排名的过程一样。