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 に答える