我有一个包含以下列的 MySQL 表:
这是我的表格:测试
ID UID TAG Name Points
1 1 1 asd 10
2 2 2 qwe 30
3 2 1 zxc 20
4 2 2 rty 20
5 3 1 fgh 40
我需要从与我外部提供的特定用户(UID)相关的表中获取名称。对于所有名称,排名应与名称一起给出,具体取决于标签。
例如,选择查询为:
选择名称,...作为测试中的排名...其中 UID=2 ...
我应该得到的结果是:
Name Rank
zxc 2
qwe 1
rty 2
说明:
这里zxc
与UID=2
相关,并且在TAG=1
中排名第2,因此是第二。
同样,qwe
与 UID=2
相关,并且在 TAG=2
中排名第一,因此它是第一。
我希望任何人都可以帮助我为此制定一个选择查询。
最佳答案
要根据标签和积分获得排名,您可以使用如下内容
select t.*,
( select count(*)
from test tt
where t.TAG = tt.TAG
AND t.Points <= tt.Points
) `rank`
from test t
where t.UID = 2
order by t.TAG
在上面的查询中,子查询部分将通过比较标签相同的同一个表来获取记录数,并且第一个引用表 t 的点小于或等于第二个引用表 tt 的点,因此对于行 uid => 2 标签=> 2 name=> qwe&points => 30与同一行和所有其他行进行比较,它将返回计数1。行uid的相同情况=> 2 tag=> 2 name=> rty&points => 20该行与第一行、自身和所有其他行进行比较,它将返回 2 的计数,依此类推剩余行,因此我们可以使用这些计数作为排名,这实际上是一个排名
编辑排名号。问题
select t.*,
( select count(*)
from test tt
where t.TAG = tt.TAG
AND t.Points < tt.Points
) +1 `rank`
from test t
where t.UID = 2
order by t.TAG
关于mysql - MySQL 中的多等级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46321600/