2011-06-26 90 views
0

產品表多計算查詢

id  name  description  price 

1  AAA   AAAAAA   10.00 
2  BBB   BBBBBB   12.00 
3  CCC   CCCCCC   15.00 
4  DDD   DDDDDD   8.00 
5  EEE   EEEEEE   12.50 

銷售表

trackid  productid  affiliateid  paymentstatus  refundid 

    1   2    1   COMPLETED   1 
    2   2    0   DONE    null 
    3   3    1   COMPLETED   null 
    4   3    0   COMPLETED   null 
    5   3    0   COMPLETED   null 
    6   5    5   DONE    null 
    7   5    0   COMPLETED   2 
    8   5    2   COMPLETED   null 
    9   2    0   DONE    null 
    10   3    1   COMPLETED   3 

對於銷售表

  • 如果沒有關聯公司具體的銷售,然後AFFILIATEID是0否則affiliateid(我有另一個用戶列表供應商和分支機構的表)

  • 如果一個特定的銷售是被退還(由於任何原因),則refundid將被設置爲某個值,否則這將是空

  • paymentstatus可以具有1 2的任何值,完成並DONE

現在我需要查詢該列表下的產品表中的每個產品數據

productid  name  totalsales  affsales  refunds 

    1   AAA   0    0    0 
    2   BBB   1    1    1 
    3   CCC   4    2    1 
    4   DDD   0    0    0 
    5   EEE   2    1    1 

totalsales:銷售和收費mentstatus爲 「已完成」

affsales:銷售與paymentstatus爲 「已完成」 和AFFILIATEID不等於0

退款:銷售與paymentstatus爲 「已完成」 和refundid NOT NULL

我怎樣才能成爲本特定查詢?

回答

2
select 
     p.name, 
     SalesSummary.productid, 
     COALESCE(SalesSummary.TotalSales, 0) TotalSales 
     COALESCE(SalesSummary.AffSales, 0) AffSales 
     COALESCE(SalesSummary.Refunds, 0) Refunds 
    from 
     product p 
     left join 
      (select s.productid, 
        count(*) TotalSales 
        sum(if(s.affiliateID > 0, 1, 0)) affSales, 
        sum(if(ifnull(s.RefundID, 0) > 0, 1, 0)) Refunds 
       from 
        sales s 
       where 
        s.PaymentStatus = 'COMPLETED' 
       group by 
        s.productid 
      ) SalesSummary 
     on p.id = SalesSummary.productid