2009-11-25 27 views
3

我有數據的表像這樣:MySQL的組返回的最小值,並獲得相應的行數據

- PK_table - merchantName - price - Product 
- 1  - argos  - 7  - 4 
- 2  - comet  - 3  - 4 
- 1  - Dixon  - 1  - 3 
- 1  - argos  - 10 - 4 

我想選擇一個產品的最低價格,並在mysql中相應的商戶。

我想:

SELECT Product, merchantName, min(price) 
FROM a_table 
GROUP BY product 

但是其返回的結果不正確,因爲它選擇的第一商家名稱,而不是MIN的相應的零售商。

你怎麼做到的?

回答

7
SELECT Merchant.Product, Merchant.Name, Merchant.Price 
FROM a_table AS Merchant 
JOIN 
(
SELECT Product, MIN(Price) AS MinPrice 
FROM a_table 
GROUP BY Product 
) AS Price 
ON Merchant.Product = Price.Product 
AND Merchant.Price = Price.MinPrice 

如果兩個商傢俱有相同的低,低價格,將返回兩行。

+1

我們不會被低估? – 2009-11-25 19:36:56

+1

對不起,提出一箇舊的東西..我想知道是否有一種方法,我可以實現這個沒有子查詢。我可以做子查詢,因爲'MIN'中的表達式是複雜的,耗時的。 – Manu 2013-08-14 10:13:31

+0

如果優化得當,並且只需要一個產品,那麼這個查詢將只對它需要的行執行MIN計算。如果您的引擎沒有對所有產品進行優化(以及計算MIN(無論)),則可以通過將'FROM a_table'更改爲'FROM a_table WHERE Product = Some_Product'進行手動優化。如果您想要查詢所有產品,那麼您需要使用子選擇,但這沒關係,因爲最終結果需要所有計算。 – 2013-08-14 15:20:54

相關問題