我想计算game_votes
g_id
等于14
的所有行,它的效果差不多,但如果没有{{1}的任何记录它仍会在g_id = 14
字段中显示1
。
这是我的问题:
cnt
什么错了?我错过了什么吗?
答案 0 :(得分:2)
检查
的结果SELECT *
FROM (`games`)
LEFT JOIN `game_votes`
ON
`game_votes`.`g_id` = `games`.`id`
WHERE `games`.`id` = '14'
您将看到使用LEFT JOIN
(而不是JOIN
)是原因。
答案 1 :(得分:2)
您的计数为1,因为COUNT(*)实际上是计算结果集中的行数。由于您从游戏桌中选择了一行ID为14并且将其加入到game_votes表中,只要存在ID为14的游戏,您将始终拥有1行或更多行是否在您的game_votes表中包含任何相应的投票。而不是COUNT(*),请尝试COUNT(game_votes
。g_id
)。如果没有投票,则g_id字段将包含空值,并且COUNT()在其计算中不包含空值。
答案 2 :(得分:1)
SELECT SUM(vote) as vote, COUNT(*) as cnt from games,game_votes where game_votes.g_id=games.id and games.id=14;
这应该有效
答案 3 :(得分:0)
MySQL SUM
函数需要GROUP BY
...请参阅http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html