Reputation: 31647
Below is what I have
userid score
1 8
2 5
3 4
4 4
5 10
6 3
What I want is as below
userid score position
5 10 1
1 8 2
2 5 3
3 4 4
4 4 4
6 3 5
NOTE:
I have code where I have created below output,
userid score position
5 10 1
1 8 2
2 5 3
3 4 4
4 4 4
6 3 6
Code is
SELECT userid, score,
(SELECT COUNT(*) FROM fschema.mytab3 u2
WHERE
u2.score > u1.score) + 1 AS position FROM fschema.mytab3 u1
ORDER BY position
I want user 6 to have position
as 5
instead of 6
Upvotes: 0
Views: 444
Reputation: 76077
What about this?
SELECT userid, score,
(SELECT COUNT(distinct u2.score) FROM fschema.mytab3 u2
WHERE
u2.score > u1.score) + 1 AS position FROM fschema.mytab3 u1
ORDER BY position
Upvotes: 2
Reputation: 122002
Try this one -
SELECT
*,
@r:=IF(@score IS NULL OR @score <> score, @r+1, @r) position, @score:=score
FROM
fschema.mytab3,
(SELECT @r:=0, @score:=NULL) t
ORDER BY
score DESC, userid
Upvotes: 1
Reputation: 13488
I think that you could try it using variables, which looks easier. Something like this:
SELECT userid, score, @rownum:=@rownum+1 as position
FROM fschema.mytab3 u1, (SELECT @rownum:=0) r
ORDER BY score;
(Currently I'm unable to check MySql queries, please, excuse me if there is some error)
Upvotes: 0