1

我正在尝试从以下内容中仅进行一个查询,但找不到一种方法(问题是硬编码日期现在取决于祖父列,因此 mysql 不会承认我'我试图在 1 个查询中做到这一点,而不是仅仅为了它而创建一个临时表。

select sum(result) 
from 
(
    SELECT 
      round(SUM(sr3.F_RESULT)/count(distinct(sr3.f_subgame_id))) as result,
      sr3.f_team_id
    FROM t_subgames_results sr3
    JOIN t_subgames s3 on s3.f_subgame_id = sr3.f_subgame_id
    JOIN t_seasons_games sg3 on sg3.f_game_id = s3.f_game_id
    WHERE sg3.f_date < '2012-09-14'
      and sr3.f_result>-1
    GROUP BY sr3.f_player_id
) averageByPlayer
group by f_team_id;

如您所见,我需要按团队获得平均结果,但是必须先计算每个球员的平均值(并向上取整),然后再按团队求和。

有没有办法让它只有一个查询?

4

1 回答 1

1

如果没有子查询或两个完全不同的表,就无法做你想做的事情。每个SELECT只能聚合一组组,而不是两个嵌套级别的组。

但是,可能有一种方法可以避免使用临时表。EXPLAIN可能会向您展示执行计划,该查询实际上是如何执行的。如果那里没有提到临时表,那么 MySQL 引擎已经优化了它。否则,也许稍微修改查询可能会有所帮助。例如,您可以尝试包含f_team_id在内部GROUP BY,最好是之前f_player_id

如果这不起作用,您可能希望在SQL Fiddle上提供一些示例数据,以便用户可以尝试这些数据以尝试找到不使用临时表的公式。确保包含真实的金额数据,因为优化可能会考虑表格行数。

于 2012-09-20T14:41:09.233 回答