【问题标题】:How to get an average number of rows grouped by matched column?如何获得按匹配列分组的平均行数?
【发布时间】:2021-04-03 05:37:32
【问题描述】:

我有一个赛车运动数据库,需要创建一个查询来查找每年每场比赛(名称)的平均总进站次数。 每一行都是一个进站,我计算了每年发生的进站次数。

我目前的查询是:

SELECT   
pitstopRaceName AS raceName,  
(SELECT AVG(COUNT(pitstopRaceDate))) AS totalPitstop  
FROM MoSpo_PitStop  
GROUP BY pitstopRaceName ,pitstopRaceDate  
ORDER BY pitstopRaceName  

这给出了结果:

raceName totalPitstop
British Grand Prix 1.0000
British Grand Prix 6.0000
British GT Championship '2.0000
German Grand Prix 5.0000
German Grand Prix 1.0000
German Grand Prix 4.0000
Italian Grand Prix 1.0000
Italian Grand Prix 5.0000

每一行都是它自己的年份,我只是没有将它们包含在查询中

但我需要的是所有比赛名称来平均他们的总进站次数,例如英国大奖赛平均 6 和 1 获得 3.5,意大利大奖赛平均 1 和 5 获得 3 等等。 我无法弄清楚如何完成这项工作,任何人都将不胜感激。

【问题讨论】:

  • 编辑您的问题并显示 source 数据的样子。

标签: mysql sql datetime count aggregate-functions


【解决方案1】:

但我需要的是所有比赛名称来平均他们的总进站次数,例如英国大奖赛平均 6 和 1 获得 3.5,意大利大奖赛平均 1 和 5 获得 3 等等

我怀疑您需要两个级别的聚合。首先按年份和种族,这样我们就可以计算进站次数,然后仅按种族来计算每场比赛的年平均值:

select race_name, avg(cnt_pitstops) as avg_pitsops_per_year
from (
    select year(pitstopracedate) as race_year,
        pitstopracename as race_name, 
        count(*) as cnt_pitstops
    from mospo_pitstop
    group by race_year, race_name
) t

【讨论】:

    【解决方案2】:

    如果我理解正确,你可以数一下进站次数,然后除以年数:

    select pitstopRaceName,
           count(*) / count(distinct pitstopRaceDate)
    from MoSpo_PitStop ps
    group by pitstopRaceName;
    

    如果pitstopRaceDate 没有定义比赛,您可以只使用年份:

    select pitstopRaceName,
           count(*) / count(distinct year(pitstopRaceDate))
    from MoSpo_PitStop ps
    group by pitstopRaceName;
    

    【讨论】:

      猜你喜欢
      • 2018-11-22
      • 2011-10-21
      • 2013-11-24
      • 1970-01-01
      • 2010-11-27
      • 2022-08-14
      • 1970-01-01
      • 2012-03-18
      • 2013-09-03
      相关资源
      最近更新 更多