2016-01-09 58 views
-2

我需要掃描兩個表(所有行名稱匹配的行),然後我需要查找賣出價和買入價中的最大差異。 (可以獲得最高利潤)循環查詢多行

如何嚴格使用mysql來查找此結果?我想要查詢來執行計算。

我有兩個表:

賣出:

Name | Sell_price | Seller 
------------------------ 
Toyota | 12,000  | Mike 
Toyota | 11,000  | Tony 
Toyota | 9,000  | James 
---------------------------- 
Mazda | 5,000  | Craig 
Mazda | 4,000  | Roger 
Mazda | 3,000  | Jones 

購買:

Name | Buying_Price | Buyer 
------------------------ 
Toyota | 13,000  | Steve 
Toyota | 12,000  | Andy 
Toyota | 10,000  | Charles 
---------------------------- 
Mazda | 5,000  | Thatguy 
Mazda | 4,000  | Dog 
Mazda | 3,500  | Cat 

結果:

Name |Profit | Buyer | Seller 
---------------------------------- 
Toyota | 2,000 | Charles | Mike 
--------------------------------- 
Mazda | 1,500 | Craig | Cat 
+1

請顯示您嘗試過的一些sql代碼,您得到的結果以及您錯過的內容。 –

+0

我不明白你爲什麼選擇豐田而不是其他任何名字的查爾斯和邁克。每個品牌選擇行的規則是什麼?我沒有看到什麼讓克雷格成爲買家,貓是賣家的成果。這是一個錯誤還是一些額外的邏輯?除此之外:你的實際問題是什麼?您當然知道如何從表格中選擇,如何加入,如何過濾,如何彙總,那麼您究竟需要哪些幫助? –

+0

@thorstenKettner這是因爲這是我可以爲豐田做的最大利潤(賣給查爾斯),(賣給邁克)給我2000美元的利潤。 – Edward

回答

2

加入品牌的表,然後進行過濾,只得到最大的銷售和最低買入價:

select 
    sell.name, 
    sell.sell_price - buy.buying_price as profit, 
    buy.buyer, 
    sell.seller 
from sell 
join buy on buy.name = sell.name 
where (sell.name, sell.sell_price) in 
(
    select name, max(sell_price) 
    from sell 
    group by name 
) 
and (buy.name, buy.buying_price) in 
(
    select name, min(buying_price) 
    from buy 
    group by name 
); 

或者做相反,過濾,然後再加入:

select 
    s.name, 
    s.sell_price - b.buying_price as profit, 
    b.buyer, 
    s.seller 
from 
(
    select * 
    from sell 
    where (name, sell_price) in 
    (
    select name, max(sell_price) 
    from sell 
    group by name 
) 
) s 
join 
(
    select * 
    from buy 
    where (name, buying_price) in 
    (
    select name, min(buying_price) 
    from buy 
    group by name 
) 
) b on b.name = s.name; 
1

你需要每一行比較反對每隔一行,所以OUTER JOIN是你的朋友。然後你就可以在你的SELECT做一個計算,並使用AS分配一個臨時的列名:

SELECT s.name, (s.sell_price - b.buy_price) AS profit, s.seller, b.buyer 
FROM `sell` as s 
OUTER JOIN `buy` as b ON s.name=b.name 

要在排序,你只需要利用ORDER BY

SELECT s.name, (s.sell_price - b.buy_price) AS profit, s.seller, b.buyer 
FROM `sell` as s 
OUTER JOIN `buy` as b ON s.name=b.name 
ORDER BY profit 

你也許是對不在代碼中執行此操作取決於您的上下文。

+0

這是如何找到最高利潤#,如每個汽車名稱的max(buy_price) - min(sell_price)。 – Edward

+0

@愛德華應該嗎?這個問題實際上沒有提到。 –

+0

對不起,你是對的,但是是啊,我需要得到最大的差異價格,這就是爲什麼它不是一個簡單的查詢,我相信 – Edward

1

喜歡的東西(未測試):

選擇s.sell_price - 從賣方爲s由s.name,b.name上s.name加入買方爲b像b.name組b.buyer_price;

1

一一點點修改後的查詢,但我想這是給更精確的結果。 如果您正在計算您的proffit作爲賣家,那麼您必須只選擇買入價格大於賣出價格的行。

SELECT s.name, s.sell_price, b.buy_price, (b.buy_price - s.sell_price) AS proffit, s.seller, b.buyer 
FROM `sell` as s 
RIGHT JOIN `buy` as b ON s.name=b.name WHERE b.buy_price > s.sell_price ORDER BY proffit DESC 

,其結果將是:

name | proffit | seller | buyer 
-------------------------------------------- 
Toyota | 4,000  | James | Steve 
Mazda | 2,000  | Jones | Thatguy 
Toyota | 1,000  | James | Charlie 
0

根據您的結果表,U盤需要檢索只有中沒有任何損失的利潤記錄。你可以嘗試像這樣。

SELECT s.Name, (s.Sell_Price-b.Buying_Price) AS Profit, b.Buyer, s.Seller 
FROM Sell s RIGHT JOIN Buy b ON s.Name=b.Name 
WHERE b.Buying_Price > s.Sell_Price;