Mysql 聚合子查询或联接中的计数
我有两个表来定义游戏细节:一个包含游戏的表和一个包含移动的表 我知道该轮到谁了Mysql 聚合子查询或联接中的计数,mysql,join,subquery,aggregate-functions,Mysql,Join,Subquery,Aggregate Functions,我有两个表来定义游戏细节:一个包含游戏的表和一个包含移动的表 我知道该轮到谁了 SELECT (COUNT(idx) %2) FROM history WHERE gameID=x 结果=1时为白色,结果=0时为黑色 现在我想选择一个特定的系列游戏,这是我的行动 不知道我在游戏中是白人还是黑人 因此,现在我使用另一个查询: SELECT g.gameID FROM games AS g WHERE (g.whitePlayer = 2 or (g.blackPlayer = 2) 然后我使
SELECT (COUNT(idx) %2) FROM history WHERE gameID=x
结果=1时为白色,结果=0时为黑色
现在我想选择一个特定的系列游戏,这是我的行动
不知道我在游戏中是白人还是黑人
因此,现在我使用另一个查询:
SELECT g.gameID
FROM games AS g
WHERE (g.whitePlayer = 2 or (g.blackPlayer = 2)
然后我使用gameID查看这是否是我的动作。如果没有,那我就跳过那场比赛
我想将这两者结合起来,我试图创建一个聚合子集,但由于计数问题,未能成功
例如,这不起作用且不返回任何内容:
SELECT *
FROM games as g
WHERE (g.whitePlayer = 2)
AND gameID IN (SELECT gameID
FROM history as h
HAVING (COUNT(h.idx) %2) = 1)
或
有人知道如何解决这个问题吗
试试这个
Select count(h.idx) , COUNT(h.idx) %2
From history as h
Inner Join games g
On h.gameID = g.gameID
WHERE whitePlayer=2
HAVING COUNT(h.idx) %2 = 1
我还没说完,但这回答了我自己的问题
SELECT g.gameID, (count(h.idx)%2) as lastmove
FROM games as g
inner join history as h on g.gameID=h.gameID
WHERE (g.whitePlayer=2)
GROUP by g.gameID, g.whitePlayer
HAVING (g.whitePlayer=2 AND lastmove=0)
更接近,但第一次计数返回whiteplayer=2的所有计数项目。我需要所有的比赛。如果您愿意,请选择h.gameID等。。这将只返回第一个合适的游戏。你能提供一把小提琴和你想要的结果吗?需要我移动的游戏中的所有gameID。啊哈,我昨天不明白,但你是指一把sqlfiddle!我在上创建了一个,请记住,自动增量只保证在表中是唯一的。不能保证它们是按顺序排序的,也不能保证它们永远不会重复使用。如果必须处理事务表上的回滚,则尤其如此:。没有提到数据库中的并发插入。
SELECT g.gameID, (count(h.idx)%2) as lastmove
FROM games as g
inner join history as h on g.gameID=h.gameID
WHERE (g.whitePlayer=2)
GROUP by g.gameID, g.whitePlayer
HAVING (g.whitePlayer=2 AND lastmove=0)