在 mysql 中,我有一个 myTab1,其中包含“userId”、“name”、“gender”、“birthMonth”等列。这里是“userId”主键。整个表中只能有 1 个唯一的“userId”。
我有另一个表 myTab2,其中包含“userId”、“level”、“score”等列。该表没有主键,仅用于事务。
示例:
我的选项卡1
用户 ID 姓名 性别 出生月份 abc name1 男 一月 xyz name2 女进行曲 mno name3 男 July
我的标签2 用户 ID 级别得分 abc 1 10 ABC 2 9 ABC 3 11 abc 4 10 ABC 5 23 XYZ 1 11 XYZ 2 10 移动号 1 8
现在我只需要 myTab1 中具有最高级别的前 3 位用户及其姓名,如下
用户Id名称等级分数 abc 名称1 5 23 xyz 名称2 2 10 移动运营商名称3 1 8
以下是我写的,但不确定如何得到上面的结果。我不擅长数据库查询并寻求帮助。
SELECT b.*, a.name FROM myTab1 AS b INNER JOIN myTab2 as a ON (b.userId=a.userId) ORDER BY level DESC limit 3
您可以尝试下面的查询
SELECT t1.userId, t1.name, t2.level, t2.score
FROM myTab1 AS t1
JOIN myTab2 AS t2 ON t1.userId = t2.userId
WHERE (SELECT COUNT(*) FROM myTab2 WHERE userId = t2.userId AND level >= t2.level) <= 3
ORDER BY t2.level DESC, t2.score DESC;
我添加的子查询
(SELECT COUNT(*) FROM myTab2 WHERE userId = t2.userId AND level >= t2.level)
可以计算每个用户的级别在myTab2中的排名。
让我知道这是否正是您想要的。