在mysql中有没有快速查询平均值的方法

在mysql中有没有快速查询平均值的方法,mysql,performance,Mysql,Performance,下表名称为:球队得分 ---------------------------- Team score date ---------------------------- A 1 2017-07-01 B 2 2017-07-02 A 3 2017-07-02 B 4 2017-07-01 C 5 2017-07-02 C 6 2017-07-

下表名称为:球队得分

----------------------------
Team    score   date
----------------------------
A       1       2017-07-01 
B       2       2017-07-02
A       3       2017-07-02
B       4       2017-07-01
C       5       2017-07-02
C       6       2017-07-01
去拿这张桌子

-------------------------------------
team    avg     avg_excluding_itself 
-------------------------------------
A       2.0     4.25 
B       3.0     3.75 
C       5.5     2.50 
最有效的方法是什么

下面的查询将无法工作,因为它太消耗资源。该表的大小为100GB

select a.team, avg(a.score) as avg, avg(b.score) as avg_excluding_itself
from team_score a join team_score b on a.team <> b.team group by a.team
选择a.team,平均得分(a.score)作为平均得分,平均得分(b.score)作为平均得分,不包括自身
从a队得分a队加入a队得分b队b队a队
两个原则:

  • 平均值是总和除以计数

  • “排除”可以通过计算整个总数减去要排除的部分来计算

产量:

SELECT
        team,
        ROUND(sum_me / count_me, 1) AS "Team's avg",
        ROUND((sum_all - sum_me) / (count_all - count_me), 2) AS "Avg of others"
    FROM ( SELECT team,
                  SUM(score) AS sum_me,
                  COUNT(*) AS count_me
               FROM team_score
               GROUP BY team ) AS me
    JOIN ( SELECT SUM(score) AS sum_all,
                  COUNT(*) AS count_all
               FROM team_score ) AS x   -- only one row
    GROUP BY team;

将有两个表扫描,每个子查询一个;这样做效率太低。

您是如何得出这样的结论的:这将消耗资源。是否共享结果,并尝试对查询执行
解释
,以帮助确定资源消耗的任何问题。100GB?你有世界各地所有小联盟比赛的分数吗?