[英]SQL query with subqueries, joining multiple tables - MySQL
這些表是:
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
與products
上的product_id
列連接,並將products
與producers
表的id
列連接,然后為所有生產者計算適當的收入,然后找到最大值。
問題是,如何在MySql中編寫。
您可以從以下內容開始:
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
表中,以使其更加容易。
您要做的是總結每個生產者的訂單值。 訂單價值由價格,數量和折扣定義。 由於在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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.