重複の可能性:
Mysql ランク関数
次のcountryTableがあります
country clicks
------- ------
0 222
66 34
175 1000
45 650
この場合は 2 である国 45 のランキングを取得するにはどうすればよいですか?
重複の可能性:
Mysql ランク関数
次のcountryTableがあります
country clicks
------- ------
0 222
66 34
175 1000
45 650
この場合は 2 である国 45 のランキングを取得するにはどうすればよいですか?
注文者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 ;
以下のように、その下に 2 ランクを取得できます。
Select * from tabeName order by clicks limit 1,1
3 ランクの場合:
Select * from tabeName order by clicks limit 2,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
これにより、国 45 の正しいランク (2) が表示されます。同順位のランク付け方法を指定しないため、比較を自分に合わせて変更することをお勧めします。存在しない国のランクは 0 です。
SELECT COUNT(*) rank
FROM countryTable a
JOIN countryTable b
ON a.clicks <= b.clicks
WHERE a.country = 45
X
あなたが探す必要があるランクです:
SELECT * FROM T ORDER BY clicks DESC LIMIT X-1,1
別の (驚くほど高速な) 方法を次に示します (ただし、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;