0

我对 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”分组,并为所有商店合并创建一个总数。但我无法弄清楚。

谢谢!

4

2 回答 2

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。

PS 我没有你的数据库架构的副本,上面的 SQL 查询实际上可能无法按预期工作 - 它只是应该为你指明正确的方向。

于 2013-03-08T00:43:27.780 回答
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;
于 2013-03-08T00:44:25.980 回答