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

selectステートメントにsubQueryは必要ありません。基準に基づいて、GROUPBYステートメントと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

メタクリティック列(およびSELECTリスト内の他のすべて)は、集計関数の一部である必要があります。つまりSUM、またはCOUNTまたは、 players.idのようにステートメントMAXにリストされている必要があります。GROUP BYその列全体に何らかのSUMが必要だと思います

于 2013-03-06T15:35:38.033 に答える