5

我正在使用这个查询:

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

我需要如何修改我的查询?我究竟做错了什么?

4

2 回答 2

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
于 2012-09-13T15:23:51.263 回答
0

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

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

于 2012-09-13T15:28:19.070 回答