2015-11-16 74 views
0

這是當前的SQL查詢我正在與工作:MySQL的組由min()和限制輸出

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 

從該數據集:

Product Name   Price 
11   Merch1  19.00 
11   Merch2  20.00 
11   Merch3  19.00 
11   Merch4  19.50 
12   Merch1  20.00 
12   Merch2  20.00 
13   Merch1  17.00 
13   Merch3  15.00 

當前SQL輸出多個產品記錄時價格是這樣的:

Product Name   Price 
11   Merch1  19.00 
11   Merch3  19.00 
12   Merch1  20.00 
12   Merch2  20.00 
13   Merch3  15.00 

我想分組產品和顯示最低的價格與通信行列數據。如果產品上的兩個價格相同,請使用找到的第一條記錄。

試圖得到這樣的結果:

Product Name   Price 
11   Merch1  19.00 
12   Merch1  20.00 
13   Merch3  15.00 
+0

只是完全消除連接。 '選擇商家。*,分(價格)...組產品'。你會最終遇到第一個遇到的商家mysql,但是你只能得到每個產品id的單個最低價格記錄。 –

+0

更新了原始問題以更好地描述我想要實現的目標。 –

回答

2

你不需要任何連接來做到這一點。

如果你正在尋找的商家,以獲得最低報價爲每一個產品,你可以這樣做:

SELECT Product, Name, MIN(Price) as MinPrice 
FROM a_table 
GROUP BY Product, Name 

如果你只是想最小价格的產品,無論商人,你可以這樣做:

SELECT Product, MIN(Price) as MinPrice 
FROM a_table 
GROUP BY Product 
+0

當我運行底部查詢時,它返回最低價格,但名稱和產品似乎來自不同的行。 –

+0

@ShamusMay,你在運行頂部(第一個)查詢嗎?底部的只應該返回產品,而不是名稱。頂部查詢將按產品和名稱進行分組,然後爲您提供具有該產品和名稱的所有行的最低價格。 – DenimChicken

+0

我敢肯定這只是我沒有解釋什麼最終結果應該是正確的。需要返回每個產品最低價格(sku)的行。這些查詢似乎都沒有這樣做。我試過兩個查詢[鏈接](http://sqlfiddle.com/#!9/c8937c/3/0) –

0

這裏是最後的工作我需要查詢...

http://sqlfiddle.com/#!9/c8937c/35/0

SELECT emp2.product, 
     emp1.name, 
     emp2.MinPrice 
FROM (
    SELECT product, 
    Min(price) as MinPrice 
    FROM Merchant 
GROUP BY product 
) as emp2 JOIN Merchant as emp1 ON emp1.price = emp2.MinPrice 
GROUP BY product;