2013-03-06 42 views
0

我在做一个网站,一个幻想电影联盟和我想要做的就是前三名总分整体MySQL的数学获得前3名的分数

总得分应该是:各种总和每个玩家的DIVIDED由该玩家的活跃的电影数量活跃的电影点

(所以,如果一个球员从活动电影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 
+1

你需要添加一个GROUP BY,并在电影表中的ID做一个SUM – 2013-03-06 15:24:31

+0

是的,完美!谢谢你一堆 – ISOcrates 2013-03-06 15:33:59

回答

0

您在select语句中不需要子查询。根据您的标准,您只需使用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列表)要么必须的组成部分聚合函数即SUMCOUNTMAXGROUP BY中列出的像players.id这样的语句。我假设你想整个列上的某种SUM

+0

好吧,我会尽力解决这个问题,谢谢 – ISOcrates 2013-03-06 15:42:57

+0

你可以给我一个提示,说明你对分组每列的含义吗?尝试没有成功:/ – ISOcrates 2013-03-06 16:18:21

+0

我添加了一个额外的评论,我的答案应该有帮助 – 2013-03-06 16:34:04