标题可能无法准确描述我的问题,对此感到抱歉。
我有两张桌子:
2016Athletes:
Name Position 40_dash Year Overall
Jared Goff QB 4.82 2016 1
Carson Wentz QB 4.77 2016 2
Joey Bosa DE 4.88 2016 3
Ezekiel Elliott RB 4.47 2016 4
Jalen Ramsey CB 4.41 2016 5
............
和
2017Athletes:
Name Position 40_dash Year Overall
Myles Garrett DE 4.64 2017 1
Mitchell Trubisky QB 4.67 2017 2
Solomon Thomas DE 4.69 2017 3
Leonard Fournette RB 4.51 2017 4
Corey Davis WR NULL 2017 5
..............
我首先想要合并40_dash列并找到平均值,我可以做几个方法,但我遇到的真正问题是,在找到平均值后,我想按位置分组。我不确定它是否相关,但目标是最终选择一个我知道的特定运动员是一个令人印象深刻的异常值,并将他与所有运动员,所有防守球员,然后所有线卫的平均值进行比较,这个分组是我的初始我的报告中的以下查询的基线。
我最好的解决方法是
select avg(40_dash)
from ((select 40_dash from 2016Athletes) union ALL
(select 40_dash from 2017Athletes)
)sl GROUP BY Position;
但是,我知道这不起作用,因为按功能分组是不正确的。我将它们合并后,我不确定如何调用'unioned'列。
之后,我想找到每个运动员禁食40_dash时间,也按位置分组。一个min()函数似乎可以完成这项工作,但是再一次,group by是什么让我感到沮丧。
感谢任何可以提供帮助的人!
答案 0 :(得分:2)
您需要在子查询中选择position
列,以便您可以在主查询中对其进行分组。
SELECT Position, AVG(40_dash)
FROM (
SELECT Position, 40_dash FROM 2016Athletes
UNION ALL
SELECT Position, 40_dash FROM 2017Athletes
) as x
GROUP BY Position
请参阅SQL select only rows with max value on a column了解如何找到每组中时间最快的玩家。然后,您可以使用上述查询加入该查询,以便将最快速度与平均值进行比较。