首页 > 解决方案 > 我怎样才能对 SQL 数据库进行这个复杂的查询

问题描述

我有一个看起来像这样的数据库:

播放器(用户 ID、邮件、密码、用户名、LastLogin

排行榜(UserId *、等级、杀戮、死亡)

匹配(MatchIdHostId *、ServerIp、StartTime、Team1Points、Team2Points)

MatchStats ( UserId *, MatchId *, Kills, Deaths)

武器(IdWeapon、名称、伤害、火速、装填时间、射程)

库存(用户ID * ,武器类型*,皮肤)


我需要一个查询来选择在至少 3 场比赛中死亡超过 12 次(MatchStats.Deaths > 12)的每个玩家的 LastLogin。有人能帮我吗?我在可能的联接或子查询方面遇到了麻烦。

我试过类似的东西:

SELECT LastLogin FROM Player WHERE UserId=(SELECT UserId FROM (SELECT * FROM MatchStats WHERE Deaths>12 AS TAB) WHERE COUNT(UserId)>3)) 

或者

SELECT LastLogin FROM Player
WHERE (SELECT COUNT(SELECT Count(*) FROM MatchStats WHERE Deaths>12 GROUP BY UserId)>3 GROUP BY UserId;

但我觉得我离正确查询还很远,也许我错过了一个 Join 或者我做错了..

标签: mysqlsqldatabasejoinsubquery

解决方案


你可以exists用来检查一个球员在至少三场比赛中是否有 12 人死亡

select lastlogin from Player p 
where exists 
(  select UserIdfrom MatchStats m 
   where deaths>=12 and p.UserId=m.UserId 
   group by userid 
   having count(distinct matchid)>=3 
)

推荐阅读