0

我正在为一个奇幻电影联盟做一个网站,我想做的是获得总分前 3 名

总分应该是:每个玩家的活跃电影的各个分数的总和除以该玩家的活跃电影的数量

(所以如果一个玩家从活跃电影中获得 300 分并且有 3 部活跃电影,那么答案应该是 100)

所以我的问题是:如何在不指定 player_id 的情况下计算单个玩家的活跃电影数量(在子查询中)?

SELECT 
players.id as player_id,
first_name, last_name,
(metacritic + (imdb*10) + top_bottom + power(receipts,(2/9)) + ticket + oscar_noms + oscar_wins + gg_noms + gg_wins + isa_noms + isa_wins + razzie_noms + razzie_wins + festival_points + ifca_points) / (SELECT COUNT(id) FROM movies WHERE release_date >= CURDATE() and year_id=1 and player_id=4) as player_active_movie_total
FROM movies
INNER JOIN players on players.id=movies.player_id
WHERE release_date >= CURDATE() and year_id=1
ORDER BY player_active_movie_total DESC
LIMIT 3
4

1 回答 1

0

您的选择语句中不需要子查询。根据您的标准,您只需要使用 GROUP BY 语句和 ID 上的 COUNT。下面的查询将不起作用,因为您需要对每一列进行分组/求和,但应该为您指明正确的方向

SELECT players.id as player_id, first_name, last_name,
(metacritic + (imdb*10) + top_bottom + power(receipts,(2/9)) + ticket + oscar_noms +     oscar_wins + gg_noms + gg_wins + isa_noms + isa_wins + razzie_noms + razzie_wins +     festival_points + ifca_points) / 
(COUNT(id)) as player_active_movie_total
FROM movies
 INNER JOIN players on players.id=movies.player_id
WHERE release_date >= CURDATE() and year_id=1
GROUP BY players.id, first_name, last_name
ORDER BY player_active_movie_total DESC
LIMIT 3

您的 metacritic 列(以及 SELECT 列表中的所有其他列)要么需要成为聚合函数的一部分,即SUM要么COUNT或要么MAX或列在GROUP BY像 player.id 这样的语句中。我假设你想要整个列上的某种 SUM

于 2013-03-06T15:35:38.033 回答