1

次のクエリがあります。

SELECT @rn:=@rn+1 AS rank, pet_name, pet_count
FROM (
  SELECT pet_name, COUNT(*) AS pet_count
  FROM pets
  WHERE pet_breed="cat"
  GROUP BY pet_name
  ORDER BY pet_count DESC
) t1, (SELECT @rn:=0) t2

次のような出力が生成されます。

1   Kitty   87
2   Smokey  81
3   Bella   80
4   Oreo    63
5   Charlie 63
6   Tiger   62
7   Lucy    62
8   Jack    61
9   Tigger  60

問題は、Oreo と Charlie、Tiger と Lucy は両方とも 63 であるため、結果が次のようになるため、同じようにランク付けする必要があることです。

1   Kitty   87
2   Smokey  81
3   Bella   80
4   Oreo    63
4   Charlie 63
5   Tiger   62
5   Lucy    62
6   Jack    61
7   Tigger  60

思い通りにするための微調整がわかりません。

提案?

4

1 に答える 1

1
SELECT IF((@previous = pet_count, @rn, @rn:=@rn+1) AS rank, pet_name, pet_count, @previous := pet_count
FROM (
  SELECT pet_name, COUNT(*)  AS pet_count
  FROM pets
  WHERE pet_breed="cat"
  GROUP BY pet_name
  ORDER BY pet_count DESC
) t1, (SELECT @rn:=0) t2

これは実際には試していません。しかし、コンセプトは機能します

于 2013-07-29T06:17:17.480 に答える