sql—如何从具有group by的表中查找最大值

rjjhvcjd  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(531)

我有下表(播放器)列

playerId  score  teamId

此表包含所有球队的所有球员信息。playerid是主列。每个团队都包含多个玩家,因此teamid上有许多重复的值。分数是每个球员的分数。
我想编写一个配置单元sql来查询每个团队的max score player。下面是我尝试的查询:

select max(score) score, teamId from player group by teamId

这个查询可以正常工作,但它只显示teamid和最大得分。我也想查询playerid。如果在“选择”列中添加playerid,则会出现以下错误:

org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: SemanticException [Error 10002]: Line 1:32 Invalid column reference 'playerId'

看来我只能从分组中得到这个专栏了。如何编写查询来查找playerid?

mctunoxg

mctunoxg1#

在配置单元中,应使用窗口函数执行此操作:

select p.score, p.teamId
from (select p.*,
             row_number() over (partition by teamId order by score desc) as seqnum
      from player p
     ) p
where seqnum = 1;

单独进行聚合和连接是表达这种逻辑的“老”方法。在过去的几十年中,sql变得更加强大。

mutmk8jj

mutmk8jj2#

除非两个队员在同一个队中得分相同,否则这将起作用。在这种情况下,它将为该团队返回两行。

select a.score, a.teamId, b.playerId
from (
select max(score) as score, teamId 
from player 
group by teamId
) a
inner join player b
on a.teamId = b.teamId and a.score = b.score

相关问题