2017-09-11 5 views
0

クエリに詰まっています。私は、player_api_idを主キーとして2つのテーブルplayerとplayer_attributesを持っています。派生した結合および集約関数がエラーを投げる

私は一番若い、最も古いプレーヤーと、最も古いプレイヤーと最も若いプレイヤーの平均総合評価を見つける必要があります。参加中に

SELECT player_api_id, avg(overall_rating) as avg_score, 
FROM (
    SELECT player_api_id, overall_rating FROM player_attributes 
) as p 
GROUP BY player_api_id; 

エラー:すべてのプレイヤーの平均総合評価のため

select player_name, birthday,YEAR(CURDATE()) - YEAR(birthday) as age from player where 
birthday=(select max(birthday) from player) 
or 
birthday=(select min(birthday) from player) 

クエリ:最年少と最も古いプレーヤーを書くため

クエリ

select player_api_id, avg(overall_rating),min(birthday),max(birthday) as avg_score 
FROM (
    SELECT player_api_id, overall_rating FROM player_attributes 
) as p 
join 
(select birthday from player) as p1 
on p.player_api_id=p1.player_api_id 
GROUP BY player_api_id; 

を私は今混乱している?

+0

'p1'には' player_api_id'という列がありません。 –

+0

'p1'は' player_api_id'列を持っていません。 –

答えて

1

サブクエリを使用して列を選択する理由はありません。実際、MySQLでは、本当に悪い考えです.MySQLがサブクエリを実現するからです。

それでは、実行します。

select pa.player_api_id, avg(overall_rating) as avg_score, 
     min(p.birthday), max(p.birthday) 
from player_attributes pa join 
    player p 
    on pa.player_api_id = p.player_api_id 
group by pa.player_api_id; 

私はロジックの残りの部分は大丈夫ですかはわかりません。しかし、これは少なくとも、構文エラーを修正する必要があります。

+0

Thanks..itは構文エラーを修正しました。 – Ron

関連する問題