2012-01-19 1 views
1

私のクエリに少しだけ微調整が必​​要です。例えば関連するデアグリッジ、その後ロールアップで適用

a_inv 
assignment_id total 
========================= 
1    500 

次に、2つのテーブル、割り当てのカテゴリやチャンネル、::

a_cat 
assignment_id category_id 
============================== 
1    1 
1    11 

a_ch 
assignment_id channel_id 
============================== 
1    16 
1    25 

は、だから私は必要なものを私はこのような割り当てと値で満たされているテーブルを持っていますカテゴリとチャンネルごとにどれくらい費やされたかを把握しています(ロールアップあり)。大幅に高く評価されて

category_id channel_id cur_total 
===================================== 
1    16   125.0000 
1    25   125.0000 
1    NULL   125.0000  <---- this should be "250.0000" 
11   16   125.0000 
11   25   125.0000 
11   NULL   125.0000  <---- this should be "250.0000" 
NULL   NULL   125.0000  <---- this should be "500.0000" 

すべてのヘルプ:それは私が必要なものに非常に近い結果を与える

SELECT 
    ac.category_id, ach.channel_id, ((ia.total/COUNT(DISTINCT ac2.category_id))/COUNT(DISTINCT ach2.channel_id)) AS cur_total 
FROM 
    a_cat ac 
LEFT JOIN 
    a_ch ach ON ach.assignment_id = ac.assignment_id 
LEFT JOIN 
    a_inv ia ON ia.assignment_id = ac.assignment_id 
LEFT JOIN 
    a_cat ac2 ON ach.assignment_id = ac2.assignment_id 
LEFT JOIN 
    a_ch ach2 ON ach2.assignment_id = ac.assignment_id 
WHERE 
    ac.assignment_id = 1 
GROUP BY 
    ac.category_id, ach.channel_id WITH ROLLUP 

は、ここで私はと最も近いを得たクエリです。

ありがとうございます!

答えて

2

この

SELECT category_id, channel_id, SUM(cur_total) 
FROM (
    SELECT 
     ac.category_id, ach.channel_id, ((ia.total/COUNT(DISTINCT ac2.category_id))/COUNT(DISTINCT ach2.channel_id)) AS cur_total 
    FROM 
     a_cat ac 
    LEFT JOIN 
     a_ch ach ON ach.assignment_id = ac.assignment_id 
    LEFT JOIN 
     a_inv ia ON ia.assignment_id = ac.assignment_id 
    LEFT JOIN 
     a_cat ac2 ON ach.assignment_id = ac2.assignment_id 
    LEFT JOIN 
     a_ch ach2 ON ach2.assignment_id = ac.assignment_id 
    WHERE 
     ac.assignment_id = 1 
    GROUP BY 
     ac.category_id, ach.channel_id 
    ) as t1 
GROUP BY category_id, channel_id WITH ROLLUP 
をお試しください
関連する問題