【问题标题】:Mysql query for grouping orders with specific data from another table用于将具有来自另一个表的特定数据的订单分组的 Mysql 查询
【发布时间】: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

【问题讨论】:

标签: mysql sql database


【解决方案1】:

像这样(LEFT JOIN ... ON):

select orders.*,
       sum(orders_intra.quantity*orders_intra.price) as ordersum
  from orders left join orders_intra on orders_intra.order_id=orders.id
  group by orders.id;

【讨论】:

  • 谢谢!这行得通。但是我担心使用连接,因为这些表实际上有更多的字段和很多行,希望它不会减慢速度。
  • 连接操作是使用关系组合来自不同表的字段的唯一方法。您的示例查询也使用了连接,即使它没有明确使用单词 JOIN
  • 哈,它在真实数据库上不起作用:#2006 - MySQL 服务器已经消失,但是如果我在 sqlfiddle 测试它 - 它可以工作。哦,表格中有 12000 和 15000 行,这不可能是真的
猜你喜欢
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多