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

凯尔

我有以下两个关系:

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;      

从某种意义上说,该查询可以实现我的目标,即返回关系中的所有Games,该关系按按每个游戏工作的人数排序,但是我试图修改此查询,以便它可以做两件事。一,它只应返回参与该游戏的人员最多的游戏,二,如果有两个具有相同工作量的游戏,则应同时返回这两个游戏。我知道如果我这样替换顶行:

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

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

季奇琴科

任务可以简化为:

给我原始查询中所有开发人员最多的行

可以通过WITH 声明来达到目的答案如下:

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)

希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

关系代数-SQL中的最大值

来自分类Dev

从SQL选择中返回最大值

来自分类Dev

从SQL中的多对多关系中查找最大值

来自分类Dev

SQL选择最大值

来自分类Dev

SQL-选择一行中的最大值

来自分类Dev

SQL选择从结果最大值中获取的位置

来自分类Dev

根据列 SQL Server 中的最大值选择行

来自分类Dev

Oracle SQL:仅返回最大值

来自分类Dev

仅打印列中的最大值

来自分类Dev

SQL选择最大值(COUNT)

来自分类Dev

如何选择SQL输出的最大值

来自分类Dev

从列SQL中选择最大值

来自分类Dev

选择列的SQL最大值

来自分类Dev

使用 subQuery SQL 选择最大值

来自分类Dev

选择的最大值

来自分类Dev

CQL(cassandra)-仅选择其中一列中具有最大值的行

来自分类Dev

如何按名称分组,然后仅选择R中每个分组的最大值?

来自分类Dev

EFCore Linq:仅选择列最大值的记录

来自分类Dev

Oracle SQL 用于比较列值并选择最大值在列 1 中的行

来自分类Dev

SQL查询:选择子选择的最大值

来自分类Dev

在Java中获取最大值sql

来自分类Dev

如何在SQL Server中按标题每天选择一列中的最大值

来自分类Dev

SQL选择一行中具有最大值的行

来自分类Dev

根据Oracle PL / SQL中的其他列最大值选择字段

来自分类Dev

如何在SQL中为属性选择最大值的行

来自分类Dev

选择表中某个值的名称(例如,最大值)

来自分类Dev

合并多列,但仅保留r中的最大值

来自分类Dev

如何在Gnuplot中仅绘制yerrorbars的最大值?

来自分类Dev

选择多个最大值