带子查询的SQL查询,连接多个表-MySQL

时间:2019-03-22 12:18:35

标签: mysql sql subquery

这些表是:

1) Producers: id, name
2) Products: id, name, price, category_id, producer_id
3) Customers: id, name, surname, age, country_id
4) Customer_orders: id, customer_id, product_id, quantity, discount, order_date

我需要找到收入最高的产品生产商,换句话说:找到一个生产者,其所有产品price * quantity - discount的总和最高。

我想我应该将表customer_ordersproduct_id上的products列连接,并将productsproducers上的id表连接然后计算所有生产者的适当收入,然后找到最大值。

问题是,如何在MySql中编写。

2 个答案:

答案 0 :(得分:1)

您可以从这样的内容开始:

SELECT SUM(price - discount) income, producers.name name FROM customer_orders LEFT JOIN products ON customer_orders.product_id = products.id LEFT JOIN producers ON producers.id = products.producer_id GROUP BY producer_id

我不确定这是否能完全按照我的输入方式工作,但这应该是一个起点。

以下是一些有用的链接:

Left Joins Sum Function

请注意:我目前正在服务器上,其中表的结构是这样的,它非常慢,很难完成任何事情。我鼓励您考虑至少将producer_idcustomer_orders的总订单添加到docker swarm init表中,以使其变得更加容易。

答案 1 :(得分:1)

您想要做的是总结每个生产者的订单值。订单价值由价格,数量和折扣定义。由于在customer_orders表中只能找到最后2个,因此您必须加入Products表。 可以使用以下查询完成此操作:

select * from customer_orders
inner join products on products.id = customer_orders.product_id

但是由于我们应该按生产者对它们进行分组,因此我们也需要生产者的名称或ID,因此我们还必须加入生产者表:

select * from customer_orders
inner join products on products.id = customer_orders.product_id
inner join producers on producers.id = products.producer_id

现在,您正在选择所需的所有信息。要进行计算,您需要将星号替换为:

(customer_orders.quantity * customer_orders.discount) - products.price

这将为您提供每个订单的价值。

要汇总给定生产者的所有订单,您需要将以上行包装在SUM()函数中,并且需要在查询的末尾添加GROUP BY子句。

select SUM( (customer_orders.quantity * customer_orders.discount) - products.price) as value, producers.name from customer_orders
inner join products on products.id = customer_orders.product_id
inner join producers on producers.id = products.producer_id
group by producers.name