gpt4 book ai didi

sql - 仅选择 SQL 关系中的最大值?

转载 作者:行者123 更新时间:2023-12-04 22:05:54 25 4
gpt4 key购买 nike

我有以下两个关系:

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;

这个查询有点实现了我的目标,因为它返回了关系中的所有游戏,并按参与每个游戏的人数排序,但我正在尝试修改这个查询,以便它执行两个操作事物。第一,它应该只返回参与人数最多的游戏;第二,如果有两款游戏的参与人数相同,那么它应该返回这两款游戏。我知道如果我像这样替换顶行:

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

然后它实现了我的第一个目标,但如果有两款游戏的开发人数最多,那么它只会返回其中一款游戏。我该如何更改此查询,以便它返回参与人数最多的所有游戏?

最佳答案

任务可以缩短为:

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

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

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)

希望这有帮助。

关于sql - 仅选择 SQL 关系中的最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29787954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com