2012-09-20 41 views
1

我試圖只做出以下一個查詢,但找不到一種方法來做到這一點(事情是硬編碼的日期取決於盛大父列現在這樣MySQL不會承認,我試圖做的是,在1個查詢,而不是隻是爲了它的緣故創建臨時表。Mysql:在一個合併2個查詢(都有他們自己的分組...)

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; 

正如你所看到的,我需要通過球隊的比賽來獲得平均的結果,但是平均值必須在球隊總和之前對每個球員進行計算(並且四捨五入)。

有沒有辦法讓它只有一個查詢?

回答

1

沒有子查詢或兩個完全不同的表,沒有辦法做你想做的事情。每個SELECT只能聚合一組,而不是兩組嵌套級別。

但是,可能是是一種避免使用臨時表的方法。 EXPLAIN可能會向您顯示執行計劃,該查詢實際執行的方式。如果沒有提到臨時表,那麼MySQL引擎已經優化了這一點。否則,可能對查詢稍作修改可能會有所幫助。例如。你可以嘗試在內部GROUP BY中包括f_team_id,最好在f_player_id之前。

如果這樣做不起作用,您可能需要提供SQL Fiddle的一些示例數據,以便用戶可以嘗試使用該數據以試圖找到不使用臨時表的公式。確保包含實際的金額數據,因爲優化可能會考慮表格行的數量。

+0

謝謝MvG,很高興知道。最後我意識到我們錯過了一個完全改變了查詢的要求。我意識到我有太多的邏輯,所以我會有一個更簡單的查詢,而在其他地方做邏輯。 – Icefire