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

标签 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
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

关于来自子查询和分组问题的 MySQL 最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4650845/

相关文章:

mysql从其他数据库插入嵌套选择截断双值

php - PHP-如果当前循环中不存在图像,则嵌套循环将拉入先前的循环图像

php - 计算并显示日期为 'secs ago' 、 'mins ago' 、 'hours ago' 等

mysql - GROUP BY 非 NULL 值

r - 在 R 中分组,ddply 与 weighted.mean

mysql - SQL子查询帮助(我相信使用聚合函数)

mysql - 创建 View 检查其他表是否有值(value)

c# - MySql 中的日期时间

mysql - SQL Group 通过返回错误结果

mysql - 列出 SQL 中 2 个列值的 Max(difference )