2011-04-13 40 views
1

當使用SQL MIN()函數時,我想選擇任何與MIN行匹配的其他字段。以下查詢返回正確的MIN(sellPrice),但不匹配product_price表中的正確行。我怎樣才能做到這一點?選擇基於SQL的額外字段MIN()

SELECT p.*, MIN(pp.sellPrice) AS sellPrice, pp.* FROM `product` AS p 
LEFT JOIN `product_price_group` AS ppg ON p.`id` = ppg.`productId` 
LEFT JOIN `product_price` AS pp ON ppg.`id` = pp.`priceGroupId` 
WHERE p.`active` = 1 AND p.id = 1 
+0

你是什麼意思'匹配在PRODUCT_PRICE table.'正確的行?你想加入最低價格還是什麼?我真的很驚訝,這個SQL甚至可以工作,因爲你沒有一個「GROUP BY」子句.... – 2011-04-13 20:54:17

+0

是的確的我試圖加入最低價格,我想其他領域屬於最低賣價。 – tom 2011-04-14 03:43:39

回答

1

通過一些建議,我用了GROUP BY屬性,下面的查詢是否工作正常,如果我想以最低的sellPrice某種產品:

SELECT p.*, MIN(pp.sellPrice) AS sellPrice, pp.quantity, pp.`priceGroupId` 
FROM `product` AS p 
LEFT JOIN `product_price_group` AS ppg ON ppg.productId = p.`id` 
LEFT JOIN `product_price` AS pp ON pp.priceGroupId = ppg.`id` 
WHERE p.`active` = 1 AND p.id = 1 AND pp.sellPrice IS NOT NULL 
GROUP BY pp.id; 

對所有產品:

SELECT p.*, MIN(pp.sellPrice) AS sellPrice, pp.quantity, pp.`priceGroupId` 
FROM `product` AS p 
LEFT JOIN `product_price_group` AS ppg ON ppg.productId = p.`id` 
LEFT JOIN `product_price` AS pp ON pp.priceGroupId = ppg.`id` 
WHERE p.`active` = 1 AND pp.sellPrice IS NOT NULL 
GROUP BY pp.id; 
1

你在找什麼都行那裏沒有更低的價格:

SELECT p.*, pp.sellPrice AS sellPrice, pp.* FROM `product` AS p 
LEFT JOIN `product_price_group` AS ppg ON p.`id` = ppg.`productId` 
LEFT JOIN `product_price` AS pp ON ppg.`id` = pp.`priceGroupId` 
WHERE p.`active` = 1 AND p.id = 1 
    AND NOT EXISTS (SELECT 1 FROM product_price AS pp2 
     WHERE pp2.productId = pp.productId AND pp2.sellPrice < pp.sellPrice) 
GROUP BY productId; 

我猜什麼鍵都參與了一點。這個想法是讓WHERE NOT EXISTS尋找價格較低的任何相關行。通過這種方式,MySQL只會在結果中包含無法找到這種「較低價格」匹配的行。

1

你想要最低售價所有產品每個產品

所有產品

SELECT p.* 
    , pp.sellPrice 
    , pp.* 
FROM product AS p 
LEFT JOIN product_price_group AS ppg 
    ON p.id = ppg.productId 
LEFT JOIN product_price AS pp 
    ON ppg.id = pp.priceGroupId 
WHERE p.active = 1 
    AND p.id = 1 
    AND pp.sellPrice = 
    (SELECT MIN(pp.sellPrice) 
     FROM product_price 
    ) 

每個產品

SELECT p.* 
    , pp.sellPrice 
    , pp.* 
FROM product AS p 
LEFT JOIN product_price_group AS ppg 
    ON p.id = ppg.productId 
LEFT JOIN product_price AS pp 
    ON ppg.id = pp.priceGroupId 
JOIN 
    (SELECT priceGroupId 
     , pp.MIN(pp.sellPrice) AS sellPrice 
    FROM product_price 
    GROUP BY priceGroupId 
) AS ppmin 
    ON ppmin.priceGroupId = pp.priceGroupId 
    AND ppmin.sellPrice = sellPrice 
WHERE p.active = 1 
    AND p.id = 1