簡體   English   中英

帶子查詢的SQL查詢,連接多個表-MySQL

[英]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_ordersproducts上的product_id列連接,並將productsproducers表的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

我不確定這是否會完全按照我的輸入方式工作,但這應該是一個起點。

以下是一些有用的鏈接:

Left Joins Sum Function

請注意:我目前正在服務器上,其中表的結構是這樣的,它非常慢,很難完成任何事情。 我鼓勵您考慮至少將總訂單和producer_idcustomer_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM