我有一个User
带有两个属性的简单表ID
,AGE
现在我想获得一个“排名”结果基于AGE
User Table
ID AGE
0 23
1 35
2 30
3 52
4 35
5 23
6 19
如果我这样做,select * from User order by AGE ASC
我可以轻松获得如下排序结果:
ID AGE
6 19
0 23
5 23
2 30
1 35
4 35
3 52
但我真正想要的是:
ID RANK
6 0
0 1
5 1
2 3
1 4
4 4
3 6
我在下面提出了很好的解决方案,但它有一个微小的缺陷
SELECT U1.ID, count(*) AS RANK
FROM User U1, User U2
WHERE U1.age > U2.age
GROUP BY U1.ID ORDER BY RANK;
这给了我:
ID RANK
0 1
5 1
2 3
1 4
4 4
3 6
这是正确的,只是我输掉了一个排名为零的原因WHERE U1.age > U2.age
,因为对于最年轻的用户来说永远不会正确。
请高手指点一下这个问题,先谢谢了!