2

我想从game_voteswhere g_idis equal to 计算所有行14,它工作得几乎很好,但如果没有任何记录,g_id = 14它仍然会显示1在该cnt字段中。

这是我的查询:

SELECT
     SUM(vote) as vote,
     COUNT(*) as cnt
FROM (`games`)
LEFT JOIN `game_votes`
ON
     `game_votes`.`g_id` = `games`.`id`
WHERE `games`.`id` = '14'

怎么了?我错过了什么吗?

4

4 回答 4

2

检查结果

SELECT *
FROM (`games`)
LEFT JOIN `game_votes`
ON
     `game_votes`.`g_id` = `games`.`id`
WHERE `games`.`id` = '14'

你会看到你的 using LEFT JOIN(而不是JOIN)是原因。

于 2012-06-10T01:51:41.230 回答
2

您得到的计数为 1,因为 COUNT(*) 本质上是计算结果集中的行数。由于您从游戏表中选择 id 为 14 的行并将其加入到 game_votes 表中,因此只要存在 id 为 14 的游戏,您将始终拥有 1 行或更多行,无论如何它是否在您的 game_votes 表中包含任何相应的投票。game_votes用 COUNT( . )代替 COUNT(*) g_id。如果没有投票,则 g_id 字段将包含空值,并且 COUNT() 将不会在其计算中包含空值。

于 2012-06-10T02:03:09.260 回答
1
SELECT SUM(vote) as vote, COUNT(*) as cnt from games,game_votes where game_votes.g_id=games.id and games.id=14;

这应该工作

于 2012-06-10T01:50:55.637 回答
0

MySQLSUM函数需要一个GROUP BY... 参见http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

于 2012-06-10T01:51:08.170 回答