[英]MySQL max value from subquery and group by problem
我有三个表,我们将它们称为产品,优惠券和折扣。 我有一个查询,尝试提取产品列表,并运行一个子查询以查找具有有效折扣的任何优惠券。
例如,这显示了我的尝试:
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%的折扣。 发生分组依据时,我想选择最大值,但默认情况下,MySQL返回的值为0。
使用MAX是子查询,显然只返回每个优惠券的折扣的最大值。 我只需要告诉GROUP BY使用最大值。
我可以轻松地使用GROUP_CONCAT返回所有字符串,但是在某些HAVING条件下,我还需要在计算中使用该值。
有什么建议么?
我认为您不需要或不需要子查询。 这对您有什么回报?
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分组,而subselect实际上返回三个值(每个产品优惠券一个)。 我实际上希望此查询返回错误。 您应该将折扣上移一个级别,或者将优惠券移动到子选择中。 第一个示例(在MySQL中子查询通常较慢):
select
p.productid,
max(d.discount) as discount
from
product p
left join coupon c on c.productid = p.productid
left join discount d on d.couponid = c.couponid
group by
p.productid
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.