2012-09-20 2 views
1

다음 중 하나만 쿼리를 작성하려고하지만이를 수행 할 방법을 찾을 수 없습니다. 하드 코딩 날짜는 mysql을 내가 한 쿼리에서 그렇게하려고 노력 대신에 단지를 위해 임시 테이블을 만드는거야 것을 인정하지 않도록 지금 조부모 열을 따라한다.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 엔진은 이미이를 최적화했습니다. 그렇지 않으면 쿼리를 약간 수정하면 도움이 될 수 있습니다. 예 : 내면에 f_team_id을 포함 시키려고 시도 할 수 있습니다. , 바람직하게는 f_player_id 전입니다.

그래도 작동하지 않으면 SQL Fiddle에 샘플 데이터를 제공하여 사용자가 임시 테이블을 사용하지 않는 공식을 찾으려고 시도 할 수 있습니다. 현실적인 금액 데이터를 포함 시키십시오. 최적화는 테이블 행 수를 고려할 수 있습니다.

+0

감사합니다. MvG, 알아두면 좋을 것. 결국 우리는 어쨌든 쿼리를 완전히 변경 한 요구 사항을 놓쳤다는 것을 깨달았습니다. 나는 내가 너무 많은 논리를 가지고있어서 더 간단한 질의를 대신하고 논리를 다른 곳에서 할 수 있다는 것을 깨달았다. – Icefire

관련 문제