使用SQL MIN()函数时,我想选择与MIN行匹配的任何其他字段。以下查询返回正确的MIN(sellPrice)但不匹配product_price表中的正确行。我怎样才能做到这一点?
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 :(得分: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 :(得分: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
答案 2 :(得分: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;