这些表是:
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_orders
与product_id
上的products
列连接,并将products
与producers
上的id
表连接然后计算所有生产者的适当收入,然后找到最大值。
问题是,如何在MySql中编写。
答案 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
我不确定这是否能完全按照我的输入方式工作,但这应该是一个起点。
以下是一些有用的链接:
请注意:我目前正在服务器上,其中表的结构是这样的,它非常慢,很难完成任何事情。我鼓励您考虑至少将producer_id
和customer_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