来自两个表的数据按列过滤

问题描述 投票:0回答:1

在 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

mysql inner-join
1个回答
0
投票

您可以尝试下面的查询

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中的排名。

让我知道这是否正是您想要的。

© www.soinside.com 2019 - 2024. All rights reserved.