MySQL子查询和问题分组的最大值

MySQL子查询和问题分组的最大值,mysql,group-by,subquery,Mysql,Group By,Subquery,我有三张桌子,我们假装它们叫做产品、优惠券和折扣。我有一个查询,它试图提取一个产品列表,并运行一个子查询以查找任何具有有效折扣的优惠券 例如,这显示了我正在尝试的内容: SELECT products.id, products.name, ( SELECT MAX(discounts.amount) FROM discounts WHERE discounts.coupon_id = coupons.id LIMIT 1 ) as discount FROM products LEF

我有三张桌子,我们假装它们叫做产品、优惠券和折扣。我有一个查询,它试图提取一个产品列表,并运行一个子查询以查找任何具有有效折扣的优惠券

例如,这显示了我正在尝试的内容:

SELECT products.id, products.name, 
 (
 SELECT MAX(discounts.amount) FROM discounts
 WHERE discounts.coupon_id = coupons.id
 LIMIT 1
 ) as discount
FROM products
LEFT JOIN coupons ON products.id = coupons.product_id
GROUP BY products.id
我的问题是,由于许多其他原因,我的分组是必要的。但如果每种产品都有多张优惠券,“折扣”在分组时会以奇怪的方式组合在一起

假设一个产品有三张优惠券——两张没有任何折扣,一张有33%的折扣。当发生GROUPBY时,我想选择最高的值,但默认情况下,MySQL返回的值为0

使用MAX是子查询,显然只返回每个优惠券的最大折扣值。我只需要告诉GROUP BY使用最大值

我可以很容易地使用GROUP_CONCAT返回一个包含所有元素的字符串,但在某些条件下,我还需要在计算中使用该值


有什么建议吗?

我认为您不想要或不需要子查询。这对你有什么回报

SELECT products.id, products.name, MAX(discounts.amount) AS discount
FROM products
LEFT JOIN coupons ON products.id = coupons.product_id
LEFT JOIN discounts ON coupons.id = discounts.coupon_id
GROUP BY products.id

很抱歉,您不想也不需要子查询。这对你有什么回报

SELECT products.id, products.name, MAX(discounts.amount) AS discount
FROM products
LEFT JOIN coupons ON products.id = coupons.product_id
LEFT JOIN discounts ON coupons.id = discounts.coupon_id
GROUP BY products.id

您仅按productid分组,而子选择实际上返回三个值(产品的每个优惠券一个值)。我实际上希望这个查询返回一个错误。您应该将折扣向上移动一级,或者将优惠券移动到子选择。第一个示例(MySQL中的子查询通常较慢):


您仅按productid分组,而子选择实际上返回三个值(产品的每个优惠券一个值)。我实际上希望这个查询返回一个错误。您应该将折扣向上移动一级,或者将优惠券移动到子选择。第一个示例(MySQL中的子查询通常较慢):


不幸的是,这并不像这样容易。我可能会使用联接,但实际上有四个子查询——每个子查询检查不同类型的可能折扣。我似乎不可能以一种不要求每个产品都具有全部四个联接的方式来构造联接。子查询使该条件更容易/可能。我想我会玩得更多。不幸的是,这不是这么容易。我可能会使用联接,但实际上有四个子查询——每个子查询检查不同类型的可能折扣。我似乎不可能以一种不要求每个产品都具有全部四个联接的方式来构造联接。子查询使该条件更容易/可能。我想我会玩得更多。