微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据SQL MIN选择其他字段

如何解决根据SQL MIN选择其他字段

| 使用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
    

解决方法

您要查找的是ISN价格较低的所有行:
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;
我在猜测涉及哪些键。想法是让ѭ2查找价格较低的任何相关行。这样,MySQL将在结果中仅包含找不到这样的“较低价格”匹配项的行。     ,您想要所有产品还是每种产品的最低SellPrice? 对于所有产品
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.*
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
    ,根据一些建议,我使用了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.*,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;
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。