欢迎投稿

今日深度:

一个mysql查询问题,mysql问题

一个mysql查询问题,mysql问题


昨天写了个对于我来说很复杂的sql语句。 这里先放个图:
   
现在的需要的数据如图:从product表中拿到id,name两个字段,从buy_contract_Item和sale_contract_Item中拿到quantity,totalMoney这两个字段,再从buy_contract和sale_contract中拿到contract_date字段,同时以合同签定时间为查询条件将商品各类的数量和金额sum,最后返回获取结果。表与表的关联关系如图。

后来问了下同事,拿到了返回结果:
一开始就犯了个错误,虽然从 
buy_contract_Item和sale_contract_Item获取的信息比较多,但却不能以他们为主表,这是昨天半天还没有结果的主要原因。因为所有后续的这些表都是以商品为主,为商品的买进和卖出服务的。所以这里以商品为主表做查询。    productId,Name SELECT id,name FROM product    buy_contract_itemproductId,SUM(quantity),SUM(totalMoney) --productId product SELECT  productId,SUM(quantity),SUM(totalMoney)  FROM  buy_contract_item  GROUP BY productId sale_contract_itemSUM(quantity),SUM(totalMoney) SELECT   productId,SUM(quantity),SUM(totalMoney)  FROM  sale_contract_item  GROUP BY productId  SELECTbuy_contract SUM(quantity),SUM(totalMoney)contract_date SELECT productId,SUM(quantity),SUM(totalMoney),contract_date  FROM  buy_contract_item  a  JOIN buy_contract b ON a.contract_id = b.id GROUP BY a.product_id; where SELECT productId,SUM(quantity) AS buyQuantity,SUM(totalMoney) AS buyTotalMoney,b.contract_date  FROM  buy_contract_item  a  JOIN buy_contract b ON a.contract_id = b.id WHERE 1=1  and (b.contract_date >= '2015-03-13'  and b.contract_date <= '2015-03-15') GROUP BY a.product_id; sale SELECT productId,SUM(quantity) AS saleQuantity,SUM(totalMoney) AS saleTotalMoney,d.contract_date  FROM  buy_contract_item  c  JOIN buy_contract d ON c.contract_id = d.id WHERE 1=1  and (d.contract_date >= '2015-03-13'  and d.contract_date <= '2015-03-15') GROUP BY c.product_id; SELECT  t.id,t.name,         IFNULL(buyQuantity,0) AS buyQuantity,         IFNULL(buyTotalMoney,0) AS buyTotalMoney,         IFNULL(saleQuantity,0) AS saleQuantity,         IFNULL(saleTotalMoney,0) AS saleTotalMoney  FROM product t LEFT JOIN      (         SELECT productId,SUM(quantity) AS buyQuantity,SUM(totalMoney) AS buyTotalMoney,b.contract_date          FROM  buy_contract_item  a          JOIN buy_contract b ON a.contract_id = b.id         WHERE 1=1  and (b.contract_date >= '2015-03-13'  and b.contract_date <= '2015-03-15')         GROUP BY a.product_id;     ) m ON t.id = m.productId LEFT JOIN     (         SELECT productId,SUM(quantity) AS saleQuantity,SUM(totalMoney) AS saleTotalMoney,d.contract_date          FROM  buy_contract_item  c          JOIN buy_contract d ON c.contract_id = d.id         WHERE 1=1  and (d.contract_date >= '2015-03-13'  and d.contract_date <= '2015-03-15')         GROUP BY c.product_id;     ) n ON t.id = n.productId ORDER BY buyQuantity DESCsaleQuantity DESC     写的中间可能还有错误,但大致思路是这样,复杂的sql语句,可以先写整体框架,然后在框架里不断的细化查询。

www.htsjk.Com true http://www.htsjk.com/shujukunews/7790.html NewsArticle 一个mysql查询问题,mysql问题 昨天写了个对于我来说很复杂的sql语句。 这里先放个图: 现在的需要的数据如图:从product表中拿到id,name两个字段,从 buy_contract_Item和sale _contract_Item中拿到...
评论暂时关闭