在我的例子中,如何获得 table 中两个不同列的排名?
How to get the ranks of two different colums in a table in my case?
所以我有一个名为 db_points 的 table。
----------------------------------------
| Name | Points | SPoints | RPoints |
----------------------------------------
| Max | 240 | 50 | 1242 |
| Alvin | 600 | 123 | 3012 |
| Amanda | 234 | 1000 | 132 |
| Angela | 50 | 514 | 4023 |
| Rudolph | 2000 | 230 | 1232 |
----------------------------------------
我需要基于TPoints(Points+SPoints),Points,SPoints排序的排名,基于RPoints和RPoints的排名。
对于安吉拉、鲁道夫或阿曼达来说,这看起来像下面这样。
--------------------------------------------------------------------
| RankT | Name | TPoints | Points | SPoints | RankR | RPoints |
--------------------------------------------------------------------
| 4 | Angela | 564 | 50 | 514 | 5 | 4023 |
| 1 | Rudolph | 2230 | 2000 | 230 | 2 | 1232 |
| 2 | Amanda | 1234 | 234 | 1000 | 1 | 132 |
--------------------------------------------------------------------
如您所见,排名不同。 TPoints越高,RankT越好; RPoints越低,RankR越好。
但是我需要在一个 SQL 查询中得到它。这是我到目前为止得到的:
select Rank,
Name,
TPoints,
Points,
SPoints
RankR
from (select (@pos := @pos+1) pos,
(@rank := IF(@prev = TPoints,@rank,@pos)) Rank,
TPoints,
Points,
SPoints,
Name,
RPoints,
select @rownum:=@rownum + 1 as RankR,t.*
from (select (@prev := SPoints+Points) TPoints,
SPoints,
Points,
Name,
RPoints
from db_points
order by TPoints desc)
as ll,
(select RPoints,
Name
from db_points where RPoints > 0 order by RPoints ASC) t,(SELECT @rownum := 0)
r)
as l
where Name = '%s';
希望这是可以理解的。
到目前为止,我有两个工作查询需要放入其中一个
select Rank, Name, TPoints, Points, SPoints from (select (@pos := @pos+1) pos, (@rank := IF(@prev = TPoints,@rank,@pos)) Rank, TPoints, Points, SPoints, Name from (select (@prev := SPoints+Points) TPoints, SPoints, Points, Name from db_points order by TPoints desc) as ll) as l where Name = '%s';
还有这个
select RankR
from (select @rownum:=@rownum + 1 as RankR,t.*
from (select RPoints,
Name
from db_points where RPoints > 0 order by RPoints ASC) t,(SELECT @rownum := 0)
r)
a
where Name='%s';
希望你能阅读代码,我在格式化 mysql 代码方面很糟糕。
请试一试
SELECT @rankT:=@rankT+1 as RankT,
T.*
FROM
(SELECT Name,
(Points+Spoints) as TPoints,
Points,
Spoints,
@rankR := @rankR + 1 as RankR,
Rpoints
FROM db_points p, (SELECT @rankR:=0)initialR
ORDER BY Rpoints ASC
)T,(SELECT @rankT:=0)intialT
ORDER BY TPoints DESC
然后您可以将整个查询作为子查询并执行外部 select 来查找 WHERE name like '%s'
所以我有一个名为 db_points 的 table。
----------------------------------------
| Name | Points | SPoints | RPoints |
----------------------------------------
| Max | 240 | 50 | 1242 |
| Alvin | 600 | 123 | 3012 |
| Amanda | 234 | 1000 | 132 |
| Angela | 50 | 514 | 4023 |
| Rudolph | 2000 | 230 | 1232 |
----------------------------------------
我需要基于TPoints(Points+SPoints),Points,SPoints排序的排名,基于RPoints和RPoints的排名。
对于安吉拉、鲁道夫或阿曼达来说,这看起来像下面这样。
--------------------------------------------------------------------
| RankT | Name | TPoints | Points | SPoints | RankR | RPoints |
--------------------------------------------------------------------
| 4 | Angela | 564 | 50 | 514 | 5 | 4023 |
| 1 | Rudolph | 2230 | 2000 | 230 | 2 | 1232 |
| 2 | Amanda | 1234 | 234 | 1000 | 1 | 132 |
--------------------------------------------------------------------
如您所见,排名不同。 TPoints越高,RankT越好; RPoints越低,RankR越好。
但是我需要在一个 SQL 查询中得到它。这是我到目前为止得到的:
select Rank,
Name,
TPoints,
Points,
SPoints
RankR
from (select (@pos := @pos+1) pos,
(@rank := IF(@prev = TPoints,@rank,@pos)) Rank,
TPoints,
Points,
SPoints,
Name,
RPoints,
select @rownum:=@rownum + 1 as RankR,t.*
from (select (@prev := SPoints+Points) TPoints,
SPoints,
Points,
Name,
RPoints
from db_points
order by TPoints desc)
as ll,
(select RPoints,
Name
from db_points where RPoints > 0 order by RPoints ASC) t,(SELECT @rownum := 0)
r)
as l
where Name = '%s';
希望这是可以理解的。
到目前为止,我有两个工作查询需要放入其中一个
select Rank, Name, TPoints, Points, SPoints from (select (@pos := @pos+1) pos, (@rank := IF(@prev = TPoints,@rank,@pos)) Rank, TPoints, Points, SPoints, Name from (select (@prev := SPoints+Points) TPoints, SPoints, Points, Name from db_points order by TPoints desc) as ll) as l where Name = '%s';
还有这个
select RankR
from (select @rownum:=@rownum + 1 as RankR,t.*
from (select RPoints,
Name
from db_points where RPoints > 0 order by RPoints ASC) t,(SELECT @rownum := 0)
r)
a
where Name='%s';
希望你能阅读代码,我在格式化 mysql 代码方面很糟糕。
请试一试
SELECT @rankT:=@rankT+1 as RankT,
T.*
FROM
(SELECT Name,
(Points+Spoints) as TPoints,
Points,
Spoints,
@rankR := @rankR + 1 as RankR,
Rpoints
FROM db_points p, (SELECT @rankR:=0)initialR
ORDER BY Rpoints ASC
)T,(SELECT @rankT:=0)intialT
ORDER BY TPoints DESC
然后您可以将整个查询作为子查询并执行外部 select 来查找 WHERE name like '%s'