求和总计Mysql

时间:2013-03-08 00:23:59

标签: mysql

我对Mysql相当新,需要帮助尝试组合两个mysql查询,这些查询为订单总数中的每个“storeid”提供“总计”。我目前正在使用两个查询来获得结果:

SELECT storeid, storenum, name  FROM store ORDER BY storeid DESC

SELECT SUM((1+0.07125)*qty*discprice) as total FROM items WHERE orderid IN (SELECT orderid      FROM orders WHERE store = '".$row['storeid']."' AND date >= '2012-01-01' AND date < '2013-01-01')

我正在运行while循环并使用“storeid”运行第二个查询。但是,我知道我可以做到这一点是一个查询和“storeid”分组,并为所有商店组合创建一个总数。但我无法理解。

谢谢!

2 个答案:

答案 0 :(得分:1)

诀窍是加入三个表,然后在items表上使用聚合函数。

SELECT stores.storeid, stores.storenum, stores.name, SUM((1+0.07125)*items.qty*items.discprice) as total 
FROM stores
LEFT JOIN orders ON orders.storeid=stores.storeid AND orders.date>='2012-01-01' AND orders.date<'2013-01-01' 
LEFT JOIN items  ON items.orderid=orders.orderid
GROUP BY stores.storeid, stores.storenum, stores.name

这是做什么的:

它将从stores表中选择每个商店,并总结该商店中的订单。我选择了LEFT JOIN而不是直接JOIN,因此在该时间跨度内没有任何顺序的商店仍会显示总共NULL。

P.S。我没有数据库架构的副本,上面的SQL查询可能实际上没有按预期工作 - 它应该指向正确的方向。

答案 1 :(得分:1)

SELECT s.storeid, s.storenum, s.name
       SUM((1+0.07125)*i.qty*i.discprice) AS total
FROM items AS i
LEFT JOIN orders AS o 
    ON i.orderid=o.orderid
LEFT JOIN stores AS s 
    ON o.store=s.storeid
WHERE o.date >= '2012-01-01'
  AND o.date < '2013-01-01'
GROUP BY s.storeid, s.storenum, s.name;
相关问题