Mysql SQL Oracle查询
我有两张桌子。这是一场关于国际象棋比赛和棋手的比赛 在第一张表中,我有关于球员的详细信息。 在第二个表中,我有关于游戏的详细信息(玩家1,玩家2),(游戏类型) 这两个表链接在一起。(两个参照,播放器1与第一个表中的id链接,播放器2与第一个表中的id再次链接) 我的任务是审问 我必须显示,大多数比赛的球员 问题是我把这个球员分在两张桌子上。 到目前为止,我设法从一列中显示一名玩家最多玩的游戏:Mysql SQL Oracle查询,mysql,sql,oracle,select,max,Mysql,Sql,Oracle,Select,Max,我有两张桌子。这是一场关于国际象棋比赛和棋手的比赛 在第一张表中,我有关于球员的详细信息。 在第二个表中,我有关于游戏的详细信息(玩家1,玩家2),(游戏类型) 这两个表链接在一起。(两个参照,播放器1与第一个表中的id链接,播放器2与第一个表中的id再次链接) 我的任务是审问 我必须显示,大多数比赛的球员 问题是我把这个球员分在两张桌子上。 到目前为止,我设法从一列中显示一名玩家最多玩的游戏: select Player1,count(Player1) as number_ofgames gr
select Player1,count(Player1) as number_ofgames
group by Player1
having count(Player 1) in
(select max(count(Player 1)) from games group by Player1);
我不确定您的表结构,因此假设您的
player
表有列player\u id
以及game
tableplayer1\u id
和player2\u id
此查询可能满足您在Oracle 12c上的要求
select
p.player_id,
count(*) as games_played
from
player p join game g on p.player_id = g.player1_id or p.player_id = g.player2_id
group by
p.player_id
order by
2 desc
fetch first 1 rows with ties;
如果多行与第n行的值匹配,则将与TIES
子句一起使用可能会导致返回更多行
欲了解更多详情,请阅读
在MySQL中,请使用LIMIT
:
select
p.player_id,
count(*) as games_played
from
player p join game g on p.player_id = g.player1_id or p.player_id = g.player2_id
group by
p.player_id
order by
2 desc
limit 1;
阅读更多信息:。如果您使用的是11G R2,则可以使用listagg函数。 如果没有,就很容易找到不同的方法
With distrib as
(select O as dabegin, 17 as daend, 'under 18' as category from dual
union all
select 18 as dabegin ,25 as daend, 'between 18-25' as category from dual
union all
select 26 as dabegin ,30 as daend, 'between 26-30' as category from dual
)
, games as
(select
p.player_id,
count(*) as games_played
from
player p join game g on p.player_id = g.player1_id or p.player_id = g.player2_id
group by
p.player_id)
select max(games_played), listagg(player_id,',') WITHIN GROUP (ORDER BY player_id) as 'winner(s)', category
from distrib d, games g, players p
where p.player_id=g.player_id
and g. age between d.dabegin and daend
group by g.category
因此,在Player1列上,我有一个玩家的ID,它也可以出现在Player2列上。实际上,我需要计算哪个ID的出场次数最多。我重复一遍。我设法为第1列球员做到了这一点……但我如何才能为两列球员做到这一点?因为ID也可以出现在其他列中。谢谢,伙计!它可以工作,但会显示所有玩家的id和玩过的游戏。我如何才能只显示游戏最多的玩家?您使用的是哪种DBMS?您已经标记了Oracle和MySQL。您是否包含了
限制
或先取
条款?有更多可能的解决方案,但这两个都应该有效…还有一个问题(很抱歉打扰您这么多):我知道如何显示赢得最多比赛的球员…但我需要显示来自不同年龄组的获奖者。在我的玩家表中,我有一个字段“出生”日期类型。我需要一个询问,在那里我可以显示获胜的球员,例如一个别名栏“年龄在18-25岁之间”来显示最好的球员(获胜最多)…然后另一个别名栏“年龄在26-30岁之间”等等,点击返回早期?我看不出你的问题。。。哦,现在我明白了,抱歉。这太复杂了,无法在评论中回答,我们不应该让这个问题过多。这样做的规则是“一次问一个问题”。很抱歉你可以尝试一下,展示你的努力,当你被困在这里的评论链接一个新的问题。