Select 只有 SQL 关系中的最大值?

Select only largest values in a SQL relation?

我有以下两个关系:

Game(id, name, year)
Devs(pid, gid, role)

其中 Game.id 是主键,Devs.gid 是 Game.id 的外键。

我想编写一个 SQL 查询来查找参与该游戏的人数最多的游戏。我写了以下查询:

SELECT Game.name, count(DISTINCT Devs.pid)
FROM Game, Devs
WHERE Devs.gid=Game.id
GROUP BY Devs.gid, Game.name
ORDER BY count(Devs.pid) DESC;      

这个查询有点实现了我的目标,因为它 return 关系中的所有游戏都按参与每个游戏的人数排序,但我正在尝试修改这个查询,以便它做两件事。第一,它应该只 return 开发它的人最多的游戏,第二,如果有两个游戏的开发人数相等,它应该 return 两个游戏。我知道如果我像这样替换顶行:

SELECT TOP 1 Game.name, count(DISTINCT Devs.pid)

那么它就实现了我的第一个目标,但是如果有两款游戏的开发人数最多,那么它只是其中一款游戏 return。我该如何更改此查询,使其 return 所有参与人数最多的游戏?

任务可以缩短为:

Give me all the rows from the original query with the maximum number of developers

可以通过WITHstatement到达。答案如下:

WITH GamesDevs (GameName, DevsCount)
AS
(
    SELECT Game.name AS GameName, count(DISTINCT Devs.pid) AS DevsCount
    FROM Game, Devs
    WHERE Devs.gid=Game.id
    GROUP BY Devs.gid, Game.name
    ORDER BY count(Devs.pid) DESC 
)

SELECT * FROM GamesDevs WHERE GamesDevs.DevsCount = (SELECT MAX(DevsCount) FROM GamesDevs)

希望对您有所帮助。

试试这个查询:

  select g.name, count(d.gid)
  from 
  game g 
    join 
  devs d 
  on g.id=d.gid
  group by g.name 
  having count(d.gid)= (select max (temp.cnt) from 
      (select gid p, count(*) cnt 
       from devs 
       group by gid) temp)
  ;

只需使用 with ties 语法,如果这是唯一不起作用的语法:

https://msdn.microsoft.com/en-us/library/ms189463.aspx

select      top 1 with ties
            game.name,
            count(distinct devs.pid)
from        game
       join devs
         on devs.gid = game.id
group by    devs.gid,
            game.name
order by    3 desc

还要考虑现代连接语法。

这也应该有效:)

SELECT Game.name, count(DISTINCT Devs.pid)
FROM Game, Devs
WHERE Devs.gid=Game.id
GROUP BY Devs.gid, Game.name
Having count(DISTINCT Devs.pid) = Max(count(DISTINCT Devs.pid))
ORDER BY count(Devs.pid) DESC;