2017-03-14 12 views
1

私は、MySQLで集計関数を使用できる場所と場所についていくつかの問題に取り組んでいます。私は、次の2つの単純なテーブルがある場合:MySQLの集計関数

キャンペーン表(CAMPAIGN_ID、campagin_name、口座、国)

収入表(CAMPAIGN_ID、収入、日)

を私は見つけるために、クエリを書きたいです週ごとの収入によってトップアカウント:

私は私は、これは正しくないと言われた以下の

SELECT account, SUM(revenue) as sum_rev 
FROM campaign 
JOIN revenue 
ON c.campaign_id = r.campaign_id 
WHERE revenue = 
(SELECT revenue 
    FROM campaign 
    JOIN revenue 
    ON c.campaign_id = r.campaign_id 
    WHERE revenue = MAX(SUM(revenue)) 
) 

GROUP BY week(date) 

を試してみましたが、問題だけでnは集計関数の最大と総和の推定? MySQLでは

答えて

1

、私は変数が最も簡単な方法だと思います:

SELECT cr.* 
FROM (SELECT cr.*, 
      (@rn := if(@w = concat_ws('-', yyyy, wk), @rn + 1, 
         if(@rn := concat_ws('-', yyyy, wk), 1, 1) 
         ) 
      ) as rn 
     FROM (SELECT c.account, year(r.date) as yyyy, week(r.date) as wk, SUM(r.revenue) as sum_rev 
      FROM campaign c JOIN 
       revenue r 
       ON c.campaign_id = r.campaign_id 
      GROUP BY c.account, year(r.date), week(r.date) 
      ORDER BY yyyy, wk, sum_rev DESC 
      ) cr CROSS JOIN 
      (SELECT @wy := '', @rn := 0) params 
    ) cr 
WHERE rn = 1; 
+0

最も合理的なアプローチがどうあるべきかについて*匿名​​ downvoteのための任意の理由は? –

+0

グループに「YEAR」がありません。 2年目になると、このクエリは中断されます。 –

+0

私はあなたの短いjandまたはクロスジョインの必要性に従わないでください@GordonLinoff – madman