【发布时间】:2018-05-27 17:04:30
【问题描述】:
我有两个mysql表:
1. orders
+----+------+---------+
| id | name | address |
+----+------+---------+
| 1 | aaa | asd asd |
| 2 | bbb | sdf sdf |
| 3 | ccc | dfg dfg |
+----+------+---------+
2. order_intra
+----+----------+----------+-------+
| id | order_id | quantity | price |
+----+----------+----------+-------+
| 1 | 1 | 4 | 10 |
| 2 | 1 | 1 | 11 |
| 3 | 3 | 10 | 5 |
+----+----------+----------+-------+
第一个表是订单列表,第二个是订购的产品数量和价格列表(第二个表中的order_id是第一个表的id)
我要构建结果表:
3. result
+----+------+---------+----------+
| id | name | address | ordersum |
+----+------+---------+----------+
| 1 | aaa | asd asd | 51 |
| 2 | bbb | sdf sdf | |
| 3 | ccc | dfg dfg | 50 |
+----+------+---------+----------+
ordersum 是与表 1 中具有相同 order_id 的订单的所有数量*价格的总和。 但是有些订单是“空的”:我们在 orders 表中有它们,但在 order_intra 表中没有任何产品。
我运行这个:
SELECT orders.*, SUM(order_intra.quantity*order_intra.price) AS ordersum
FROM orders, order_intra WHERE order_intra.order_id=orders.id
GROUP by orders.id
然后得到这个:
+----+------+---------+----------+
| id | name | address | ordersum |
+----+------+---------+----------+
| 1 | aaa | asd asd | 51 |
| 3 | ccc | dfg dfg | 50 |
+----+------+---------+----------+
2 号订单丢失! 如何更改我的查询以使其返回包含“空”订单? 这里是 MCVE:http://sqlfiddle.com/#!9/6f0d488/2/0
编辑:我完成了这个:
SELECT orders.*, sums.ordersum FROM orders
LEFT JOIN (SELECT order_id, SUM(order_intra.quantity*order_intra.price) AS ordersum
FROM order_intra GROUP BY order_id) AS sums ON orders.id=sums.order_id
GROUP BY orders.id
【问题讨论】:
-
使用正确的
JOIN。将所有非聚合列放在 GROUP BY 子句中。将 * 替换为列名。在编写查询时养成一个好习惯。