【问题标题】:MySQL - working out the AVG for a subset of MAX valuesMySQL - 为 MAX 值的子集计算 AVG
【发布时间】:2010-10-18 19:09:06
【问题描述】:

我有一个包含“日期、名称、分数”列的表格。

我希望获得共享共同值(例如相同的日期甚至名称)的行的 MAX(Score),然后对它们进行平均以给我一个数字,例如:

---- 日期-----| -- 姓名 -- |分数
2010-10-10 |约翰·史密斯 | 86
2010-06-05 |泰迪琼斯 | 71
2010-10-10 |约翰·史密斯 | 52
2010-06-05 |泰迪琼斯 | 68
2010-08-08 |乔博客 | 79
2010-10-10 |约翰·史密斯 | 46

所以在上面做一个 MAX(Score) 会给我 86。但是,我想要的是以下内容:

MAX(Score) 给我值 86(日期 10-10 的最大值)、79(日期 08-08 的最大值)和 71(日期 06-05 的最大值)然后我可以平均得到 78.67。我希望这是可能的,而不必求助于临时表?

感谢所有回复,谢谢。

【问题讨论】:

    标签: mysql max average


    【解决方案1】:

    每日最大值的总平均值:

    SELECT AVG(dailyMax) AS avgOfDailyMax
    FROM (SELECT Date, MAX(Score) AS dailyMax FROM MyTable GROUP BY Date) as DailyMaxTable 
    

    和每日最大值:

    SELECT Date, MAX(Score) AS dailyMax
    FROM MyTable
    GROUP BY Date
    

    【讨论】:

      【解决方案2】:
      select Date, max(Score) as MaxScore
      from MyTable
      group by Date
      

      如果你也想要Name,请这样做

      select m.Date, m.Name, m.Score
      from (
          select Date, max(Score) as MaxScore
          from MyTable
          group by Date
      ) mm
      inner join MyTable on mm.Date = m.Date 
          and mm.MaxScore = m.Score
      

      【讨论】:

      • 感谢您的回复,但是一旦我到达那里,我将如何平均所有“MAX”分数?
      猜你喜欢
      • 2015-12-03
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 2023-03-30
      • 1970-01-01
      • 2013-03-17
      相关资源
      最近更新 更多