你不应该使用
game_ratingstblx245v.game_id
分组依据中的列,因为当给定游戏ID没有分级时,该列可能为空。请使用
game_data.id
相反。
以下是我如何编写查询:
SELECT g.id, g.name,
AVG( x.rating ) AS avg_user_rating,
COUNT( DISTINCT x.userid ) AS user_count,
AVG( r.critic_rating ) AS avg_critic_rating,
COUNT( DISTINCT r.critic ) AS critic_count
FROM game_data g
LEFT JOIN game_ratingstblx245v x ON (x.game_id = g.id)
LEFT JOIN game_ratings r ON (r.game_id = g.id)
WHERE g.release_date < NOW()
GROUP BY g.id
ORDER BY g.release_date DESC, g.name;
请注意,尽管此查询在
x
和
r
不影响平均评级的计算。你以后要知道如果你在做
SUM()
或
COUNT()
计算结果可能会被无意中得到的笛卡尔积夸大。