mysql - MySQL 中的多等级

标签 mysql sql

我有一个包含以下列的 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

说明:

这里zxcUID=2相关,并且在TAG=1中排名第2,因此是第二。

同样,qweUID=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 的计数,依此类推剩余行,因此我们可以使用这些计数作为排名,这实际上是一个排名

DEMO

编辑排名号。问题

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

DEMO

关于mysql - MySQL 中的多等级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46321600/

相关文章:

mysql - SQL查询返回叶节点?

mysql - 根据 SQL 规范,对此 sql 查询的这些响应中哪些更正确?

php - Mysql数据库自增id不按升序自增

mysql - 无法从 Spring Boot 应用程序运行 flyway 脚本,数据库作为 docker 容器中的 Mysql

mysql - SELECT 语句 - 添加另一个派生字段

php - 问题加载 php_mysql.dll 扩展

sql - 行号仅用于按 id 匹配行?

SQL语法新手学生

php - 通过php将Access数据库导出到MySql

sql - 将 2 个日期行合并为 1 行中的 2 列