合并两列,使用group by进行平均,并使用group by找到最小值

时间:2018-04-28 00:14:18

标签: mysql

标题可能无法准确描述我的问题,对此感到抱歉。

我有两张桌子:

    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是什么让我感到沮丧。

感谢任何可以提供帮助的人!

1 个答案:

答案 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了解如何找到每组中时间最快的玩家。然后,您可以使用上述查询加入该查询,以便将最快速度与平均值进行比较。