【发布时间】:2011-01-10 19:52:03
【问题描述】:
我有三张表,我们假设它们分别称为产品、优惠券和折扣。我有一个查询试图提取产品列表,并运行一个子查询来查找任何具有有效折扣的优惠券。
例如,这显示了我正在尝试的内容:
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
我的问题是我的 GROUP BY 出于许多其他原因是必要的。但是,如果每个产品有多个优惠券,那么当分组发生时,“折扣”就会以奇怪的方式组合在一起。
假设一个产品有三张优惠券 - 两张没有任何折扣,一张有 33% 的折扣。当 group by 发生时,我想选择最大值,但默认情况下,MySQL 返回值为 0。
使用 MAX 是子查询显然只返回每个优惠券的最大折扣值。我只需要告诉 GROUP BY 使用最大值。
我可以轻松地使用 GROUP_CONCAT 来返回所有这些字符串,但我还需要在某些 HAVING 条件下的计算中使用该值。
有什么建议吗?
【问题讨论】: