2013-05-29 49 views
0

集團由多個表和列我有以下兩個表:MySQL的 -

content: 
======== 
cid | iid | qty 
--------------- 
    1 | 7 | 42 
    2 | 7 | 1 
    3 | 8 | 21 

ret: 
==== 
rid | cid | qty 
-------------- 
    1 | 1 | 2 
    2 | 1 | 10 
    3 | 2 | 1 

我想檢索,每個IID的content.qty和總和ret.qty 對於爲例,對於給定的表,結果將是:

iid=7, SUM(content.qty) = 43, SUM(ret.qty)=13

iid=8, SUM(content.qty) = 21, SUM(ret.qty)=0

是療法有什麼辦法在一個查詢中做到這一點?

提前,謝謝!

+0

爲什麼'IID = 7'有13了'ret.qty'?總計「ret.qty」的邏輯是什麼? – Taryn

+0

「內容」中的哪個值與「ret」綁定?它看起來應該是'cid',但這並不能解釋'iid = 7'具有'SUM(ret.qty)= 13',也不能解釋'iid = 8'的'ret.qty'總和。 –

+0

@bluefeet:'iid = 7'具有13的「ret.qty」,因爲所有'rid'(1,2,3)都是指'cid' 1和2,它們都是指'iid = 7' – unicorn

回答

0

這有點複雜,因爲你不想在你的款項中有重複。要解決這個問題,請將聚合分開做爲子查詢。第一個是直接在content第二個加入contentret得到iid列。

下面的查詢遵循這一做法,並假定cidcontent唯一鍵:

select c.iid, c.qty + coalesce(r.qty, 0) 
from (select c.iid, SUM(qty) as cqty 
     from content c 
     group by c.iid 
    ) c left outer join 
    (select c.iid, SUM(r.qty) as rqty 
     from ret r join 
      content c 
      on r.cid = c.cid 
     group by c.iid 
    ) r 
    on c.iid = r.iid;