2

に等しいgame_votesところからすべての行をカウントしたいのですが、ほぼ正常に機能していますが、レコードがない場合でもフィールドに表示されます。g_id14g_id = 141cnt

これが私の質問です:

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'

LEFT JOIN(の代わりに)を使用していることが原因であることがわかりますJOIN

于 2012-06-10T01:51:41.230 に答える
2

COUNT(*)は基本的に結果セットの行数をカウントするため、カウントは1になります。ゲームテーブルからIDが14の行を選択し、それをgame_votesテーブルに結合したままにしているので、IDが14のゲームが存在する限り、常に1つ以上の行があります。 game_votesテーブルに対応する投票が含まれているかどうか。COUNT(*)の代わりに、COUNT(game_votesg_id)を試してください。投票がない場合、g_idフィールドにはnull値が含まれ、COUNT()には計算にnull値が含まれません。

于 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関数には...が必要です... http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.htmlGROUP BYを参照してください

于 2012-06-10T01:51:08.170 に答える