2013-03-06 77 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