我在 SQL 中有下表:
CREATE TABLE `Trade` (
Sender BINARY(20) NOT NULL,
Receiver BINARY(20) NOT NULL,
Price DECIMAL(36,0) NOT NULL,
Item VARBINARY(32) NOT NULL,
) COLLATE='utf8_general_ci' ENGINE=InnoDB;
根據該表,我想確定買賣相同商品的交易者,然后按他們獲得的總利潤進行訂購。(簡而言之,我想找到有利可圖的經銷商)。
我應該按發送方還是接收方對交易進行分組,然后嘗試對該查詢進行進一步查詢?
通過以下查詢,我嘗試獲取交易者買賣相同物品的所有交易:
SELECT * FROM (SELECT * FROM Trade GROUP BY Receiver) AS r WHERE r.Receiver = Sender;
但是此查詢不回傳任何值。
任何幫助將不勝感激!
uj5u.com熱心網友回復:
看來你想要這個:
WITH
cte1 AS ( SELECT sender customer, item, SUM(price) price
FROM trade
GROUP BY 1,2 ),
cte2 AS ( SELECT receiver customer, item, SUM(price) price
FROM trade
GROUP BY 1,2 )
SELECT customer, item, cte2.price - cte1.price profit
FROM cte1
JOIN cte2 USING (customer, item)
當然,有問題。例如,客戶可能購買了 3 件商品,但只出售了其中的 2 件……如果item是名稱,而不是唯一識別符號,我看不到解決方法。
uj5u.com熱心網友回復:
您可以使用自連接方法:
SELECT
t1.Sender,
t1.Receiver,
t1.Price - t2.Price AS Diff
FROM Trade t1
INNER JOIN Trade t2
ON t2.Sender = t1.Receiver AND
t2.Receiver = t1.Sender
ORDER BY
Diff DESC;
輸出取決于您將誰視為相互貿易關系中真正的“發送者”。如果您想從另一個方向查看,您可以更改排序順序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/336018.html
標籤:mysql sql sql-order-by
下一篇:SQL遞回查詢獲取部門代碼
