Reputation: 503
The users
table is like this:
Id | Name | Room | Point |
---|---|---|---|
1 | A | 1 | 10 |
2 | B | 1 | 20 |
3 | C | 2 | 30 |
4 | D | 2 | 40 |
I want to get ranking with some conditions.
The query is SELECT *, RANK() OVER (ORDER BY users.point ASC) rnk FROM users WHERE users.room = 2
Then the ranking column(rnk
) is not a absolute ranking.
The query result is
Id | Name | Room | Point | rnk |
---|---|---|---|---|
3 | C | 2 | 30 | 1 |
4 | D | 2 | 40 | 2 |
But I want absolute ranking, and the expected result is
Id | Name | Room | Point | rnk |
---|---|---|---|---|
3 | C | 2 | 30 | 3 |
4 | D | 2 | 40 | 4 |
Upvotes: 0
Views: 149
Reputation: 48865
Rank first, filter later. For example:
select *
from (
select *, rank() over(order by point) as rnk
from users
) x
where room = 2
Upvotes: 1