Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL Oracle查询_Mysql_Sql_Oracle_Select_Max - Fatal编程技术网

Mysql SQL Oracle查询

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

我有两张桌子。这是一场关于国际象棋比赛和棋手的比赛

在第一张表中,我有关于球员的详细信息。 在第二个表中,我有关于游戏的详细信息(玩家1,玩家2),(游戏类型)

这两个表链接在一起。(两个参照,播放器1与第一个表中的id链接,播放器2与第一个表中的id再次链接)

我的任务是审问

我必须显示,大多数比赛的球员

问题是我把这个球员分在两张桌子上。 到目前为止,我设法从一列中显示一名玩家最多玩的游戏:

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
table
player1\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岁之间”等等,点击返回早期?我看不出你的问题。。。哦,现在我明白了,抱歉。这太复杂了,无法在评论中回答,我们不应该让这个问题过多。这样做的规则是“一次问一个问题”。很抱歉你可以尝试一下,展示你的努力,当你被困在这里的评论链接一个新的问题。