[SQL] MySQL은, 사용자로 순위를 잡아
SQLMySQL은, 사용자로 순위를 잡아
나는 다음과 같은 MySQL의 테이블이 있습니다 :
id name points
1 john 4635
3 tom 7364
4 bob 234
6 harry 9857
나는 기본적으로 모든 사용자를 선택하지 않고 개별 사용자 순위 싶어. 난 단지 ID로 하나의 사용자를 선택하고 그들이 가지고있는 점의 수에 의해 결정되는 사용자의 순위를 얻으려면.
예를 들어, ID 3으로 순위 2 선택에 다시 톰를 얻을.
건배
EEF
해결법
-
==============================
1.
SELECT uo.*, ( SELECT COUNT(*) FROM users ui WHERE (ui.points, ui.id) >= (uo.points, uo.id) ) AS rank FROM users uo WHERE id = @id
DENSE_RANK :
SELECT uo.*, ( SELECT COUNT(DISTINCT ui.points) FROM users ui WHERE ui.points >= uo.points ) AS rank FROM users uo WHERE id = @id
-
==============================
2.@Quassnoi에 의한 해결은 관계의 경우에 실패합니다. 다음은 관계의 경우에 작동합니다 솔루션입니다 :
@Quassnoi에 의한 해결은 관계의 경우에 실패합니다. 다음은 관계의 경우에 작동합니다 솔루션입니다 :
SELECT *, IF (@score=ui.points, @rank:=@rank, @rank:=@rank+1) rank, @score:=ui.points score FROM users ui, (SELECT @score:=0, @rank:=0) r ORDER BY points DESC
-
==============================
3.
SET @rownum := 0; SELECT rank, score FROM ( SELECT @rownum := @rownum +1 AS rank, `score` ,`user_id` FROM leaderboard ORDER BY `score` DESC , `updated_timestamp` ) as result WHERE `user_id`=$user_id LIMIT 1
from https://stackoverflow.com/questions/1293817/mysql-get-users-rank by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 문에서 [] 괄호 (0) | 2020.04.26 |
---|---|
[SQL] CodeIgniter의 MSSQL 연결 (0) | 2020.04.26 |
[SQL] 치명적인 오류 : 널 (null)의 멤버 함수 쿼리에 전화 () (0) | 2020.04.26 |
[SQL] 어떻게 오라클에서 열 행을 변환하는? [복제] (0) | 2020.04.26 |
[SQL] 왜 UDF 너무 느린 서브 쿼리보다? (0) | 2020.04.26 |