我对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”分组,并为所有商店组合创建一个总数。但我无法理解。
谢谢!
答案 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;