2017-09-11 36 views
0

我被困在查询中。我有两个表播放器和player_attributes与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) as avg_score, 
FROM (
    SELECT player_api_id, overall_rating FROM player_attributes 
) as p 
GROUP BY player_api_id; 

错误而加盟:

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

谢谢..修正了语法错误..在逻辑上工作 – Ron