2011-06-26 91 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