计算聚合子查询或加入

时间:2013-08-03 11:04:30

标签: mysql join subquery aggregate-functions

我有两个定义游戏细节的表:一个包含游戏的表和一个包含移动的表。

我可以通过

来判断是谁
SELECT (COUNT(idx) %2) FROM history WHERE gameID=x

on result = 1它是白色,结果= 0表示黑色。

现在我想选择一系列特定的游戏,这是我的举动。

我不知道我在比赛中是白人还是黑人。

所以现在我使用另一个游戏查询:

SELECT g.gameID 
FROM games AS g
WHERE (g.whitePlayer = 2 or (g.blackPlayer = 2)

然后我使用gameID来查看它是否是我的举动。如果没有,那么我跳过那个游戏。

我想将这两者结合起来,我试图制作一个聚合子集但由于COUNT()

而失败了

例如,这不起作用并且不返回任何内容:

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)
FROM history as h
INNER JOIN
    (SELECT gameID
     FROM games 
     WHERE (whitePlayer = 2)) As thesegames ON h.gameID = thesegames.gameID 
HAVING (COUNT(h.idx) %2) = 1

有没有人知道如何解决这个问题?

http://sqlfiddle.com/#!2/425fb

2 个答案:

答案 0 :(得分:0)

试试这个

 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

答案 1 :(得分:0)

我还没完成,但这回答了我自己的问题

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)