2

重複の可能性:
Mysql ランク関数

次のcountryTableがあります

country  clicks
-------  ------
0        222
66       34 
175      1000
45       650

この場合は 2 である国 45 のランキングを取得するにはどうすればよいですか?

4

6 に答える 6

2

注文者country ASC:

SELECT 1+COUNT(*) AS ranking
FROM countryTable
WHERE country < 45 ;

注文者clicks DESC:

SELECT 1+COUNT(*) AS ranking
FROM countryTable AS t
  JOIN countryTable AS c
      ON c.clicks > t.clicks
WHERE t.country = 45 ;
于 2013-01-12T15:01:13.500 に答える
2

以下のように、その下に 2 ランクを取得できます。

Select * from tabeName order by clicks limit 1,1

3 ランクの場合:

Select * from tabeName order by clicks limit 2,1
于 2013-01-12T15:01:24.687 に答える
1
SELECT *
FROM 
(
  SELECT  @ranking:= @ranking + 1 rank,
          a.country,
          a.clicks
  FROM    tableName a, (SELECT @ranking := 0) b
  ORDER BY a.clicks DESC
) s
WHERE country = 45
于 2013-01-12T15:01:55.860 に答える
1

これにより、国 45 の正しいランク (2) が表示されます。同順位のランク付け方法を指定しないため、比較を自分に合わせて変更することをお勧めします。存在しない国のランクは 0 です。

SELECT COUNT(*) rank 
FROM countryTable a
JOIN countryTable b
  ON a.clicks <= b.clicks
WHERE a.country = 45

ここで SQLfiddle

于 2013-01-12T15:08:47.793 に答える
0

Xあなたが探す必要があるランクです:

SELECT * FROM T ORDER BY clicks DESC LIMIT X-1,1
于 2013-01-12T15:04:21.450 に答える
0

別の (驚くほど高速な) 方法を次に示します (ただし、256 行に制限されています)。

SELECT country
     , clicks
     , FIND_IN_SET(clicks,(SELECT GROUP_CONCAT(DISTINCT clicks ORDER BY clicks DESC) FROM country_clicks)) rank
FROM country_clicks

または、必要に応じて...

SELECT FIND_IN_SET(clicks,(SELECT GROUP_CONCAT(DISTINCT clicks ORDER BY clicks DESC) FROM country_clicks)) rank
   FROM country_clicks
  WHERE country = 45;
于 2013-01-12T15:08:26.903 に答える