从聚合函数MAX / GROUP BY

时间:2015-07-08 19:30:22

标签: mysql function group-by aggregate

使用聚合函数时出错。希望你们可以帮助我,我解释了下面的情况。

在足球/足球比赛中,玩家在第二张黄牌后获得红牌。查询 qry1TwiceYellow 会显示有两张黄牌的玩家的唯一ID。查询在下面写下并且工作正常。

SELECT Player_ID FROM (SELECT Player_ID, Count(ID) AS Total FROM YellowCards WHERE Game_ID=29 AND HomeOrAway=1 GROUP BY Player_ID) WHERE Total=2;

现在我想要检索有关最后一张卡的一些信息:

  • 最后一张黄牌的唯一 ID
  • 分钟发生了进攻。
  • 玩家ID

我为此写了以下查询,但这会导致错误(在查询下方)。

SELECT Y.ID, Y.Player_ID, MAX(Y.Minute) As LastYellow FROM qry1TwiceYellow As q INNER JOIN YellowCards As Y ON q.Player_ID = Y.Player_ID WHERE Y.Game_ID=29 AND Y.HomeOrAway=1 GROUP BY Y.Player_ID;

Your query does not include the specified expression 'ID' as part of an aggregate function.

我尝试了以下解决方案:

  • 通过向GROUP BY添加ID,错误消失但MAX(分钟)聚合函数无效,因为ID是唯一的。
  • 省略唯一ID。然后INNER使用完整表加入Player_ID和Max(分钟)以获取唯一ID。这样可以正常工作,直到2个或更多玩家在同一分钟内获得第二张黄牌。

我该如何解决这个问题?

Thnx提前, 克里斯

1 个答案:

答案 0 :(得分:0)

这是一个查询,通过计算同一游戏和玩家以前的牌数来选择游戏的所有第二张黄牌:

SELECT Y1.ID, Y1.Player_ID, Y1.Minute
FROM YellowCards Y1
WHERE Y1.Game_ID=29 AND Y1.HomeOrAway=1 
AND (
    SELECT COUNT(*)
    FROM YellowCards Y2
    WHERE Y1.Game_ID = Y2.Game_ID AND Y1.HomeOrAway = Y2.HomeOrAway AND Y1.Player_ID = Y2.Player_ID AND Y1.Minute > Y2.Minute
) = 1;

这是SQLFiddle