【问题标题】:The difference between the minimum and maximum number of games最小和最大游戏数之间的差异
【发布时间】:2020-11-05 07:15:34
【问题描述】:

问题:显示所有具有以下条件的玩家的姓名: 最小和最大游戏数之间的差异 此玩家大于 5。

select p.name
from player p
join competition c
on c.playerID = p.playerID
where (
(select count(*) from competition
 where count(games) > 1
 group by playerID
) - (
select count(*) from competition
  where count(games) <= 1
  group by playerID
))> 5;

我有点迷路了。我不太确定这是正确的方法,我应该如何进行:我应该使用 count 并找到最小和最大游戏数并与大于 5 进行比较,还是应该使用而不是 count、minma​​x 函数。如果有人能解释一下这个逻辑,将不胜感激。

表格:

player       competition
-------      --------
playerID     playerID
name         games
birthday     date
address      
telefon

【问题讨论】:

  • 分享表格数据和预期结果
  • 您在数(比赛),但比赛表中没有比赛?这是正确的表列吗?计数日期可以假定为游戏计数吗?
  • 我编辑了表格中的乐谱,抱歉,我正在从德语翻译表格。游戏是指游戏的数量,例如游戏=2,游戏=15。 @allmhuran
  • 好的,所以让我重新表述你的问题,看看我是否正确:玩家有一个独特的playerId。一个玩家可以在给定的date 上玩很多游戏。 competition 表有一个名为games 的列,它存储给定playerId 在给定date 上玩的游戏数。找出该玩家在任何日期玩的最小游戏数与该玩家在任何日期玩的最大游戏数之间的差值大于 5 的玩家。正确吗?
  • 没错@allmhuran

标签: sql sql-server count max min


【解决方案1】:

应该是一个简单的查询:

With tab1 AS (Select player.name, min(games) mx_game, max(games) min_game,
max(games) - min(games) diff
from player JOIN competition ON player.player_id = competition.id
group by player.player_id, player.name)

Select tab1.name from tab1
WHERE diff >5;

我将 player_id 添加到组中,因为 player_name 可能与 2 人相似。

【讨论】:

  • 我试过了,但是我在关键字“WHERE”附近收到了错误的语法。
  • 不。为什么在通过语法检查之前发布答案?
【解决方案2】:
SELECT 
P.Name,
MIN(C.Games) MinGame,
MAX(C.Games) MaxGame,
FROM Player P
INNER JOIN Competition C
ON C.PlayerId = P.PlayerId
GROUP BY P.Id, P.Name
HAVING MAX(C.Games) -  MIN(C.Games)  > 5

【讨论】:

  • 如果两个玩家同名怎么办?
  • 不,仍然没有。如果您不按 p.name 分组,则无法选择它。你不应该发布你没有检查过的答案。
  • 您自己在查询编辑器中检查如何? :D
  • 是的,肯定会检查它,顺便说一句,感谢您指出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 2013-04-03
  • 2017-03-04
  • 1970-01-01
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
相关资源
最近更新 更多