排名未正确确定

时间:2012-09-13 15:19:52

标签: mysql sql join

我正在使用此查询:

SELECT A.place_idx,A.place_id,B.TOTAL_CNT,(@r := @r + 1) AS rank FROM CUSTOM_LIST
AS A
INNER JOIN
(SELECT  @r := 0)
AS C
INNER JOIN
(SELECT place_id,COUNT(place_id) AS TOTAL_CNT from COUNT_TABLE GROUP BY place_id)
AS B ON B.place_id=A.place_id order by B.TOTAL_CNT desc;

这给出了这个结果:

1

但我想要这个结果:

2

如何修改查询?我做错了什么?

3 个答案:

答案 0 :(得分:5)

SELECT *,(@r := @r + 1) AS rank FROM 
(
  SELECT A.place_idx,A.place_id,B.TOTAL_CNT FROM CUSTOM_LIST
  AS A
  INNER JOIN
  (SELECT place_id,COUNT(place_id) AS TOTAL_CNT from COUNT_TABLE GROUP BY place_id)
  AS B ON B.place_id=A.place_id order by B.TOTAL_CNT desc
) AS T, (SELECT  @r := 0) AS tt

答案 1 :(得分:0)

你想要添加

ORDER BY rank DESC

到您的SQL查询,以列出降序的排名。您也可以将DESC更改为ASC以更改顺序。

修改

我可以看到你已经有了一个订单,所以只需像这样编辑它。

你应该像以前一样用逗号添加它:

ORDER BY column1 DESC , column2 DESC

答案 2 :(得分:0)

您的C.rank会在处理时计算,而不是在排序后计算。无论如何,实际上不需要这些数据。由于您按度量标准对行进行排序,因此您知道第一行是第一行等等。您可以在将其拉出后在编程方面处理它。

或者,您可以将您拥有的内容放在内部选择中,然后执行排名。