从聚合函数 MAX/GROUP BY 中检索唯一 ID
retrieve unique ID from aggregate function MAX/GROUP BY
我在使用聚合函数时遇到错误。希望大家帮帮我,我在下面说明了情况。
在 football/soccer 比赛中,一名球员在获得第二张黄牌后得到一张红牌。查询 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.
我尝试了以下解决方案:
- 通过将 ID 添加到 GROUP BY,错误消失,但 MAX(Minute) 聚合函数无用,因为 ID 是唯一的。
- 省略唯一 ID。然后使用完整的 table INNER JOIN Player_ID 和 Max(Minute) 以获得唯一 ID。这很好用,直到 2 名或更多球员在同一分钟内获得第二张黄牌。
我该如何解决这个问题?
提前致谢,
克里斯
这是一个查询,它通过计算同一游戏和玩家之前的牌数来选择游戏的所有第二张黄牌:
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
我在使用聚合函数时遇到错误。希望大家帮帮我,我在下面说明了情况。
在 football/soccer 比赛中,一名球员在获得第二张黄牌后得到一张红牌。查询 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.
我尝试了以下解决方案:
- 通过将 ID 添加到 GROUP BY,错误消失,但 MAX(Minute) 聚合函数无用,因为 ID 是唯一的。
- 省略唯一 ID。然后使用完整的 table INNER JOIN Player_ID 和 Max(Minute) 以获得唯一 ID。这很好用,直到 2 名或更多球员在同一分钟内获得第二张黄牌。
我该如何解决这个问题?
提前致谢, 克里斯
这是一个查询,它通过计算同一游戏和玩家之前的牌数来选择游戏的所有第二张黄牌:
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